アシアル株式会社主催 開発者向け、一歩先をいくためのテクニカルセミナー

最新のPHPニュース

cURLを使わずに、PHPでPOSTリクエストを送信する

2006年11月16日

画像

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

EASYGOING

2007年04月12日 00:15 サーバ側でPOST送信処理(PHP4)

<課題>

POST送信処理を作成。ただし、サーバサイド起動...

続きを読む

日刊放言なのか。

2007年08月08日 23:56 blognの修正

久々にプログラム的ネタ。

blognのトラックバック機能は...

続きを読む

My Web Storage 備忘録なるもの

2008年04月24日 11:44 PHPで認証ページへのアクセス

CURLを使うのが普通なのかもしれないけどパッケージをインス...

続きを読む