【php】fsockopen()関数でhttpのPOSTリクエストを送信する
ソース
GETのついでにPOSTもやります。
<?php $fp = fsockopen('127.0.0.1', 80); $data = http_build_query(array('何が' => '何です', 'key' => 'value'), '', '&'); $request = array( 'POST /test/bbs.php HTTP/1.1', 'Host: www.example.com', 'Content-type: application/x-www-form-urlencoded', 'Content-length: ' . strlen($data) . '', ); fwrite($fp, implode($request, "\r\n") . "\r\n\r\n" . $data); ob_start(); fpassthru($fp); $response = ob_get_clean(); fclose($fp); $response = explode("\r\n\r\n", $response, 2); echo 'こっちがヘッダ<pre>' . $response[0] . '</pre>'; echo 'こっちがボディ<pre>' . $response[1] . '</pre>';
解説
1、任意のホストに80番ポートで接続します。
2、POSTするデータを作ります。(phpのマニュアルと違うのだが、第3引数に’&’を指定しないと’&’で区切られた)
3、POSTのHTTPリクエストメッセージを組み立てます。CR+LF 2つで区切ってヘッダとボディ(データ)を送ります。
4、phpらしく fpassthru()関数ひとつでレスポンスを回収。
5、この方法で取得したレスポンスにはヘッダがついてくるので注意。
以上
コメント