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開発者をサポートする情報を掲載しています。