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 也获取不到值
到底是我哪个地方错了啊?
最佳答案
