[php][pear]HTTP_Request2のサンプル#1
誰もが愛用しているPEAR::HTTP_Requestクラスですが、最近は後継のPEAR::HTTP_Request2クラスがリリースされてちょっと話題になりました。2009/01/21現在、バージョンは0.2.0(alpha)になっています。今後は利用される場面が増えてくると思いますので、HTTP_Requestのマニュアルに載っている全サンプルコードをHTTP_Request2対応で書き換えてみました。ソースコードやAPIリファレンスから推測して書いているので、100%正しいソースコードという保証はできませんが、そこら辺はあなたの技量でカバーしてください(笑。
とはいえ、HTTP_Request2の概要を知らない方も多いと思いますので、まずは0.2.0(alpha)時点でのHTTP_Request2の概要をまとめておきます。
- 特徴
- HTTP_RequestをPHP5対応に書きなおした
- アダプタに対応
- SocketAdapter : 従来のHTTP_Requestに相当する
- CurlAdapter : cURL拡張のラッパー
- MockAdapter : HTTP_Request2に依存しているパッケージのテスト用
- POSTリクエストにおいて以下の項目に対応
- データとファイルのアップロード
- クッキー認証
- プロキシ
- gzipとdeflateエンコーディング
- Observerを用いたリクエスト処理のモニタリング
- 動作環境
- PHP 5.1.4以上
- PEAR::Net_URL2
- 0.3.0のロードマップ
- Socketアダプタにて、HTTPSプロキシのサポート
- Socketアダプタにて、ダイジェスト認証のサポート
個人的にはcURL拡張以外でダイジェスト認証が使えるようになるのか?っていうのがちょっと期待しているところです。今まで探してもなかったもので・・・。
さてさて、本題のサンプルですね。HTTP_Requestのマニュアルには、全13個のサンプルソースコードが載っています。ブログが長くなるのも面倒なので、小分けにして紹介していきたいと思います。一応、記述の根拠となるように、変更点もコメントしておきましたので、参考にしてください。
#1 yahoo.com の内容を取得し、それを表示する
-
/**
-
* 例 48-1 yahoo.com の内容を取得し、それを表示する
-
*
-
* @link http://pear.php.net/manual/ja/package.http.http-request.intro.php
-
*/
-
require_once 'HTTP/Request2.php';
-
-
try {
-
$req = new HTTP_Request2("http://www.yahoo.com/");
-
$response = $req->send();
-
echo $response->getBody();
-
-
} catch (HTTP_Request2_Exception $e) {
-
} catch (Exception $e) {
-
}
-
-
/*****************************
-
* クラス名はHTTP_Request2になりました。
-
*
-
* コンストラクタも内部で使用するメソッドが例外を吐く可能性があるので、
-
* HTTP_Request2を使用する箇所全体をtry/catchで囲みましょう。
-
*
-
* HTTP_Request::sendRequest()はHTTP_Request2->send()に変更されました。
-
* このとき、返り値はHTTP_Request2_Responseクラスになります。
-
*
-
* HTTP_Request::getResponseBody()はHTTP_Request2_Response::getBody()に変更されました。
-
*****************************/
-
-
/*
-
///////////////////////////////
-
// 旧ソースコード
-
///////////////////////////////
-
require_once 'HTTP/Request.php';
-
-
$req =& new HTTP_Request("http://www.yahoo.com/");
-
if (!PEAR::isError($req->sendRequest())) {
-
echo $req->getResponseBody();
-
}
-
*/
-
?>
#2 二つの Web サイトの内容を取得し、一行で表示する
-
/**
-
* 例 48-2 二つの Web サイトの内容を取得し、一行で表示する
-
*
-
* この例では、二つの Web サイトの内容が取得され、表示されます。
-
* 前者は POST パラメータが処理されます。POST データスタックは、
-
* 二番目の Web サイトの内容が取得される前にクリアされます。
-
*
-
* @link http://pear.php.net/manual/ja/package.http.http-request.intro.php
-
*/
-
require_once 'HTTP/Request2.php';
-
-
try {
-
$req = new HTTP_Request2("http://www.php.net", HTTP_Request2::METHOD_POST);
-
// $req->setMethod(HTTP_Request2::METHOD_POST);
-
$req->addPostParameter('Foo', 'bar');
-
$response1 = $req->send();
-
-
$req->setMethod(HTTP_Request2::METHOD_GET);
-
$req->setURL("http://pear.php.net");
-
// $req->clearPostData();
-
$response2 = $req->send();
-
-
echo $response1->getBody();
-
echo $response2->getBody();
-
-
} catch (HTTP_Request2_Exception $e) {
-
} catch (Exception $e) {
-
}
-
-
/*****************************
-
* クラス名はHTTP_Request2になりました。
-
*
-
* HTTP_Request2::setMethod()は健在ですが、コンストラクタの第2引数にHTTPメソッドを指定するのが楽です。
-
*
-
* HTTP_Request::addPostData()はHTTP_Request2->addPostParameter()に変更されました。
-
* このとき、返り値はHTTP_Request2_Responseクラスになります。
-
*
-
* HTTP_Request2::setUrl()は今まで通りURLの文字列を受け付けますが、Net_URL2クラスも受け付けます。
-
*
-
* HTTP_Request::clearPostData()に当たるメソッドはHTTP_Request2には見受けられません。
-
* POSTメソッドの後にGETメソッドを送信しても、HTTP_Request2->addPostParameter()で設定したパラメータは
-
* 送信されることはありませんでした。(Wiresharkでパケットキャプチャをして確認済みです)
-
*****************************/
-
-
/*
-
require_once "HTTP/Request.php";
-
-
$req =& new HTTP_Request("http://www.php.net");
-
$req->setMethod(HTTP_REQUEST_METHOD_POST);
-
$req->addPostData("Foo", "bar");
-
if (!PEAR::isError($req->sendRequest())) {
-
$response1 = $req->getResponseBody();
-
} else {
-
$response1 = "";
-
}
-
-
$req->setMethod(HTTP_REQUEST_METHOD_GET);
-
$req->setURL("http://pear.php.net");
-
$req->clearPostData();
-
if (!PEAR::isError($req->sendRequest())) {
-
$response2 = $req->getResponseBody();
-
} else {
-
$response2 = "";
-
}
-
-
echo $response1;
-
echo $response2;
-
-
*/
-
?>
全記事へのリンク:
>になってますよ
[...] [/php][pear]HTTP_Request2のサンプル#1 : うえちょこ@ぼろぐ (tags: PHP PEAR HTTP_Request2 Programming Tips Reference SampleCode Libraries) [...]