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を渡し、送信するだけです。ただし、現在
のバージョンではヘッダ情報で"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->setHeader($headers);
// $uri_list = array(uri1, uri2, ...)とする
foreach ($uri_list as $uri) {
// HTTP POSTリクエストを送信し、HTTPレスポンスを取得する
$http->setUri($uri);
$httpResponse = $http->post($data);
}
?>
(アシアル 亀本大地)
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。