SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【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引数に’&’を指定しないと’&amp;’で区切られた)

3、POSTのHTTPリクエストメッセージを組み立てます。CR+LF 2つで区切ってヘッダとボディ(データ)を送ります。

4、phpらしく fpassthru()関数ひとつでレスポンスを回収。

5、この方法で取得したレスポンスにはヘッダがついてくるので注意。

以上

関連するメモ

コメント