PHPプロ!TIPS+
スクリプト上で楽にデータをPOST送信しよう
Webサイトを構築していると様々な形でデータを送信する必要がでてきます。例えば、Ping送信のように多数のサイトへ同じデータを渡すこともあるでしょう。特に、データサイズが大きい場合や、トラックバックのようにPOST形式で送信しなければならないこともあります。そこで今回はスクリプト内で POST送信を実行する簡単な方法を紹介します。
PHPに組み込まれている関数のみでデータをPOSTする場合、HTTPヘッダを自分で作成し、これにデータを付加しなければなりません。例えば、以下のようになります。
<?php
$data = 'hoge=' . urlencode($value)
. '&name=' . urlencode($name);
$post = "POST http://www.example.com/test.php HTTP/1.1\r\n"
. "Host: www.example.com\r\n"
. "Content-Type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($data) . "\r\n\r\n"
. $data ."\r\n";
?>
ご覧の通りいささか面倒です。そこでこの労力を軽減してくれるパッケージを2つ紹介したいと思います。PEAR::HTTP_Requestと Zend_Http_Clientです。
1. PEAR::HTTP_Request
PEAR::HTTP_RequestはNet_URLとNet_Socketパッケージに依存しています。インストールするときは、
pear install --alldeps HTTP_Request
のように--alldepsオプションを用いて依存関係にあるパッケージも一緒にインストールすると便利です。
HTTP_Requestの使い方は簡単です。インスタンスを作成し、メソッドを指定します。必要なデータとURLを登録し、sendRequestメソッドで指定URLへデータを送信します。
<?php
require_once 'HTTP/Request.php';
// ソケットを開き、送信形式を指定し、データを送信する
$req = new HTTP_Request();
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData('hoge', $value);
$req->addPostData('name', $name);
// $uri_list = array(uri1, uri2, ...)とする
foreach ($uri_list as $uri) {
// 送信先を設定し、レスポンスを取得する
$req->setURL($uri);
if (!PEAR::isError($req->sendRequest())) {
$response = $req->getResponseBody();
}
}
?>
2. Zend_Http_Client
このクラスはZendフレームワーク(http://framework.zend.com/)で提供されています。本家のサイトからダウンロードして下さい。
使い方はインスタンスにデータとURLを渡し、送信するだけです。ただし、ただし、現在のバージョン(執筆当時 バージョン0.2.0)ではヘッダ情報で"Content-Type:application/x-www-form-urlencoded"を指定しなければなりません。
<?php
require_once 'Zend/Http/Client.php';
// 送信するデータを整形する
$data = 'hoge=' . urlencode($value) . '&name=' . urlencode($name);
$headers = array("Content-Type: application/x-www-form-urlencoded");
// インスタンスを作成する
$http = new Zend_Http_Client();
$http->setHeaders($headers);
// $uri_list = array(uri1, uri2, ...)とする
foreach ($uri_list as $uri) {
// HTTP POSTリクエストを送信し、HTTPレスポンスを取得する
$http->setUri($uri);
$httpResponse = $http->post($data);
}
?>
バックナンバーについて
TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。





ページのトップへ


再帰関数は最初の内は混乱しますが、非常に上手く使える場面もいずれ出てきます。これを機会に学んでいけるといいですね。