最新のPHPニュース
cURLを使わずに、PHPでPOSTリクエストを送信する
cURLを使わずに、PHPでPOSTリクエストを送信するコードが、「Evil, as in Dr.」のブログにて紹介されています。
以下にサンプルコードを示します。<?php
function do_post_request($url, $data, $optional_headers = null)
{
$params = array('http' => array(
'method' => 'POST',
'content' => $data
));
if ($optional_headers !== null) {
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url,
$php_errormsg");
}
return $response;
}
$optional_headers変数は、リクエストに送信するHTTPヘッダーを格納する文字列です。
PHPのHTTP wrapperは、渡された$data変数の長さに基づき、Content-Lengthを自動的に書き込みます。$optional_headersにContent-Typeを指定できない場合は、application/x-www-form-urlencodedにContent-Typeを自動的に設定します。
リダイレクトのロジック、HTTPを使った認証処理、ユーザーエージェントの設定などにコーディングを必要としないため、この方法は手軽に利用することができます。
http_build_query()関数も参照してみましょう。この関数は、与えられた連想配列からURLエンコードされたクエリ文字列を生成する便利な関数です。
また、HTTP wrapperについては、PHPマニュアルのHTTP and HTTPSを参照してください。
cURLは高機能なライブラリですが、ちょっとしたところで用いるだけならこのような自作関数を使ってしまうほうが、ライブラリを組み込むよりも手軽でいいかもしれませんね。
関連リンク
関連ニュース
この記事へのトラックバックURL
>> ニュースの一覧へ戻る






