【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、この方法で取得したレスポンスにはヘッダがついてくるので注意。
以上