• ベストアンサー

HTTP_Requestのレスポンスの受け取り方

HTTP_Requestのレスポンスを、POST形式で受け取りたいのですが、どのようにするのでしょうか? サンプルソースには、単にechoで表示させているだけです。 結局、これを解析するほかないのでしょうか? 日付(yyyy-mm-dd hh:mm:ss)の半角空白は、+(プラス)で置き換えられるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

レスポンスではPOSTなどのmethodは存在しないので、文字列として受け取ることになると思います。 --------------------------------- require_once "HTTP/Request.php"; $req =& new HTTP_Request("http://www.example.com/"); if (!PEAR::isError($req->sendRequest())) { echo $req->getResponseBody(); } --------------------------------- サンプルソースはこの例のことを挙げているのかと思いますが、これがその答えだと思います。 例えばサーバー側のPHPが以下のような内容を返すとすると・・・ ------------------ <?php $array = array( 'name'=>'名前', 'age'=>'年齢' ); echo serialize($array); ?> ------------------ 受け取り側では以下のようにして配列にすることが出来ます。 ------------------ <?php require_once "HTTP/Request.php"; $req =& new HTTP_Request("http://www.example.com/test.php"); $data = $req->getResponseBody(); $array = unserialize($data); ------------------ サーバー側のレスポンスが、ActionScriptに渡す時のような返答の場合、受け取り側で上手く処理する必要があります。 ------------------ <?php $name = urlencode('名前'); $age = urlencode('年齢'); echo "name=$name&age=$age"; ?> ------------------ これが恐らくはPOST形式?見たいな物だと思うのですが、これは受け取り側で分割処理などをして受け取る必要があると思います。 ------------------ <?php require_once "HTTP/Request.php"; $req =& new HTTP_Request("http://www.example.com/test.php"); $data = $req->getResponseBody(); $splited = split("&", $data); $array = array(); foreach ($splited as $_v) { list($key, $value) = split("=", $_v); $array[$key] = $value; } ?> ------------------ 最後に、レスポンスで受け取った日付はURLエンコードされずに送られてきます。

besei21
質問者

お礼

ありがとうございます。 次に、これをshell上から php xxxx.php とやったら、エラーでレスポンスが取れませんでした。 ブラウザ経由でやるとOKです。 何故なのでしょう?

その他の回答 (1)

回答No.2

コマンドラインから動作させる場合、include_pathが違う物になるために最初のrquire_onceが正しく動作しなかったりします。 require_once "HTTP/Request.php"; 個の部分を require_once "/usr/share/pear/HTTP/Request.php"; なんてフルパスにするか、include_pathを設定してやるといいんじゃないかな?と思います。 (/usr/share/pearは使っている環境によって変わります php --info | grep include_pathで見れる物を設定してください。 ) また、パーミッションが正しく設定されていない場合も動きません。 0755などにしておくといいんじゃないかと思います。

besei21
質問者

お礼

すいません、補足欄に書いてしまいましたので、再度書き直します。 ---------- どうもありがとうございます。 フルパスに設定してもだめでした。 どうも、使っているOSの OpenSSL の不具合の可能性があるようで。 ありがとうございました。

besei21
質問者

補足

どうもありがとうございます。 フルパスに設定してもだめでした。 どうも、使っているOSの OpenSSL の不具合の可能性があるようで。 ありがとうございました。

関連するQ&A