REST下获取不到$this->_type和数据

浏览:1742 发布日期:2013/08/14 分类:求助交流 关键字: REST
客户端代码是以前在网上找到的,测试可以使用的:class Rest extends Think
{
    private $_host = null;
    private $_port = null;
    private $_user = null;
    private $_pass = null;

    static public function connect($host, $port, $user=null, $pass=null)
    {
        return new self($host, $port, $user, $pass);
    }

    public function __construct($host, $port, $user, $pass)
    {
        $this->_host = $host;
        $this->_port = $port;
        $this->_user = $user;
        $this->_pass = $pass;
    }

    const POST   = 'POST';
    const GET    = 'GET';
    const DELETE = 'DELETE';

    public function doPost($url, $params=array())
    {
        return $this->_exec(self::POST, $this->_url($url), $params);
    }

    public function doGet($url, $params=array())
    {
        return $this->_exec(self::GET, $this->_url($url), $params);
    }

    public function doDelete($url, $params=array())
    {
        return $this->_exec(self::DELETE, $this->_url($url), $params);
    }

    private $_headers = array();

    public function setHeaders($headers)
    {
        $this->_headers = $headers;
        return $this;
    }


    private function _url($url=null)
    {
        return "http://{$this->_host}:{$this->_port}/{$url}";
    }

    const HTTP_OK = 200;
    const HTTP_CREATED = 201;
    const HTTP_ACEPTED = 202;

    private function _exec($type, $url, $params = array())
    {
        $headers = $this->_headers;

        $s = curl_init();
      
        if(!is_null($this->_user)){
           curl_setopt($s, CURLOPT_USERPWD, $this->_user.':'.$this->_pass);
        }

        switch ($type) {
            case self::DELETE:
                curl_setopt($s, CURLOPT_URL, $url . '?' . http_build_query($params));
                curl_setopt($s, CURLOPT_CUSTOMREQUEST, self::DELETE);
                break;
            case self::POST:
                curl_setopt($s, CURLOPT_URL, $url);
                curl_setopt($s, CURLOPT_POST, true);
                curl_setopt($s, CURLOPT_POSTFIELDS, $params);
                break;
            case self::GET:
                curl_setopt($s, CURLOPT_URL, $url . '?' . http_build_query($params));

                break;
        }

        curl_setopt($s, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($s, CURLOPT_HTTPHEADER, $headers);
        $_out = curl_exec($s);

        $status = curl_getinfo($s, CURLINFO_HTTP_CODE);
        curl_close($s);
        switch ($status) {
            case self::HTTP_OK:
            case self::HTTP_CREATED:
            case self::HTTP_ACEPTED:
                $out = $_out;
                break;
            default:
                throw new Http_Exception("http error: {$status}", $status);
        }
        return $out;
    }
}

class Http_Exception extends Exception{
    const NOT_MODIFIED = 304; 
    const BAD_REQUEST = 400; 
    const NOT_FOUND = 404; 
    const NOT_ALOWED = 405; 
    const CONFLICT = 409; 
    const PRECONDITION_FAILED = 412; 
    const INTERNAL_ERROR = 500; 
}

?>
服务器端代码为:class IndexAction extends RestAction {

    //处理请求
    public function Test() {
        
        switch ($this->_method) {
            case 'get':
                
                break;
            case 'post':
                $receive=  $this->_type;
                if($receive == 'json'){
                    $json = $_POST;
                }
                $this->response('好了'.$receive,'json');
                break;
            default:
                break;
        }
    }
}
配置文件如下:return array(
    'REST_METHOD_LIST' => 'get,post,put', // 允许的请求类型列表
    'REST_DEFAULT_METHOD' => 'post', // 默认请求类型
    'REST_DEFAULT_TYPE' => 'json', // 默认的资源类型
    'REST_CONTENT_TYPE_LIST' => 'json', // REST允许请求的资源类型列表
);
测试如下:
import('ORG.Util.Rest');
$RestMsg = new Rest();
$myheaders = array(
'Content-Type:text/json'
);
$json=json_encode(array('a'=>1,'b'=>2));
$result=$RestMsg->connect("127.0.0.11",81)->setHeaders($myheaders)->doPost('index.php?g=Home&m=Index&a=test', $json);
出现以下问题:
this->_type获取不到当前访问的资源类型
$json = $_POST 也获取不到值
到底是我哪个地方错了啊?
最佳答案
评论( 相关
后面还有条评论,点击查看>>