2

HTTP_Request2 Pear クラスを使用して 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);
}
4

1 に答える 1

0

メソッドの結果はHTTP_Request2::send()とは少し異なりcurl_execます。文字列ではなく、別の型、つまりHTTP_Request2_Response.

レスポンス本文を文字列として取得するには (HTTP レスポンスにはヘッダーと本文が含まれます)、次のHTTP_Request2_Response::getBodyメソッドを使用します。

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

これはあなたが探していることをするはずです、$responseBodyそして文字列です。より一般的HTTP_Request2に言えば、オブジェクト指向のインターフェースを備えています。これにより、さまざまなアダプター (例: Curl とソケット、またはテスト用などに独自のアダプターを作成することもできます) を使用できるだけでなく、ストリーミング形式で応答本文を取得することもできます (例: 大きな応答では、すべてを 1 つにまとめることはできません)。一度に文字列)。

于 2012-09-17T18:26:36.303 に答える