- ベストアンサー
HTTP_Requestのレスポンスの受け取り方
HTTP_Requestのレスポンスを、POST形式で受け取りたいのですが、どのようにするのでしょうか? サンプルソースには、単にechoで表示させているだけです。 結局、これを解析するほかないのでしょうか? 日付(yyyy-mm-dd hh:mm:ss)の半角空白は、+(プラス)で置き換えられるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
レスポンスでは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エンコードされずに送られてきます。
その他の回答 (1)
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
コマンドラインから動作させる場合、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などにしておくといいんじゃないかと思います。
お礼
すいません、補足欄に書いてしまいましたので、再度書き直します。 ---------- どうもありがとうございます。 フルパスに設定してもだめでした。 どうも、使っているOSの OpenSSL の不具合の可能性があるようで。 ありがとうございました。
補足
どうもありがとうございます。 フルパスに設定してもだめでした。 どうも、使っているOSの OpenSSL の不具合の可能性があるようで。 ありがとうございました。
お礼
ありがとうございます。 次に、これをshell上から php xxxx.php とやったら、エラーでレスポンスが取れませんでした。 ブラウザ経由でやるとOKです。 何故なのでしょう?