PHP:HTTP_Request2给出零内容长度

时间:2012-09-16 17:15:08

标签: php curl pear http-request

我想使用HTTP_Request2 Pear Class进行POST。当我使用cURL做同样的事情时,我是成功的,但是当我使用HTTP_Request时,我没有获得响应数据。它将内容长度显示为0.我阅读了HTTP_Request2的PEAR文档并按照它来编写代码。如果有人指出我的错误,将会有很大的帮助。 cURL方法有效,但HTTP_Request2方法有效。我认为HTTP_Request2方法无法发布数据,但我也不确定标题。我的代码是

function header()
{
$this->setGuid(guid());
$this->header = array($this->service, 
time(), $this->getGuid());
return $this->header;
}

function header1()
{
$this->setGuid(guid());
$this->header = array('X-OpenSRF-service: '.$this->service, 
'X-OpenSRF-xid: '.time(), 'X-OpenSRF-thread: '.$this->getGuid());
return $this->header;
}
function toArray()
{
$url4 = urldata($this->method, $this->param);
return $url4; //returns an encoded url
}
function send1()
{
require_once 'HTTP/Request2.php';

//------cURL Method-------------------------
$endpoint = $this->endpoint;
$data = $this->toArray();
$header = $this->header1();
$url_post = 'http://'.$endpoint.'/osrf-http-translator';
$this->curl = curl_init();
curl_setopt($this->curl, CURLOPT_URL, $url_post);
curl_setopt($this->curl, CURLOPT_HEADER, 1);
curl_setopt($this->curl, CURLOPT_POST, 1);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->curl, CURLOPT_HTTPHEADER, $header);
$this->server_result = curl_exec($this->curl);
if (curl_error($this->curl) != 0 ) {
$error = 'Curl error: ' . curl_error($this->curl);
return $error;
}
var_dump ($this->server_result);
echo "<HR />";   

//-----HTTP_REQUEST2 Method---------------       
$request = new HTTP_Request2();
$request->setUrl($url_post);
$request->setHeader(array('X-OpenSRF-service' => $header[0], 'X-OpenSRF-xid' => $header[1], 'X-OpenSRF-thread' => $header[2]));
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->addPostParameter($data);
var_dump ($request); echo "<HR />";
$response = $request->send(); var_dump($response);
}

1 个答案:

答案 0 :(得分:0)

HTTP_Request2::send()方法的结果与curl_exec略有不同。它不是字符串,而是另一种类型,即HTTP_Request2_Response

要将响应正文检索为字符串(HTTP响应包含标题和正文),请使用HTTP_Request2_Response::getBody方法:

...
$response = $request->send();
$responseBody = $response->getBody();

这应该做你正在寻找的东西,$responseBody然后是一个字符串。更一般地说:HTTP_Request2具有面向对象的接口。这允许使用不同的适配器(例如Curl和套接字,或者您甚至可以编写自己的适配器,例如用于测试)以及以流式方式检索响应主体(例如,您没有将所有适配器放入单个响应中一次串起来。)