目次
Zend_Http_Client は、Hyper-Text Transfer Protocol (HTTP) リクエストを簡単に扱うためのインターフェイスを提供します。 Zend_Http_Client は、HTTP クライアントとしての最低限の機能をサポートしているだけでなく、 HTTP 認証やファイルのアップロードといった高度な機能もサポートしています。 リクエストに成功すると (失敗しても) Zend_Http_Response オブジェクトを返します。これを使用すると、レスポンスのヘッダや本文にアクセスできます (項15.5. 「Zend_Http_Response」 を参照ください)。
クラスのコンストラクタには、オプションの引数として URL を指定することができます (文字列か Zend_Uri_Http オブジェクトのどちらでも可能です)。 また、オプションで設定パラメータの配列を指定することもできます。 どちらも省略することが可能で、その場合は後から setUri() メソッドや setConfig() メソッドで指定します。
例 15.1. Zend_Http_Client のインスタンスの作成
<?php require_once 'Zend/Http/Client.php'; $client = new Zend_Http_Client('http://example.org', array( 'maxredirects' => 0, 'timeout' => 30)); // これは、上とまったく同じことです $client = new Zend_Http_Client(); $client->setUri('http://example.org'); $client->setConfig(array( 'maxredirects' => 0, 'timeout' => 30)); ?>
コンストラクタおよび setConfig() メソッドでは 設定パラメータの連想配列を受け取ります。 これらのパラメータは、設定してもしなくてもかまいません。 すべてのパラメータにはデフォルト値があります。
表 15.1. Zend_Http_Client の設定パラメータ
パラメータ | 説明 | 期待する値 | デフォルト値 |
---|---|---|---|
maxredirects | リダイレクトをたどる最大数 (0 = たどらない) | integer | 5 |
strictredirects | リダイレクトの際に RFC に厳密に従うかどうか (項15.2.1. 「HTTP リダイレクト」 を参照ください) | boolean | false |
useragent | ユーザエージェントを表す文字列 (リクエストヘッダに付加されます) | string | 'Zend_Http_Client' |
timeout | 接続タイムアウト秒数 | integer | 10 |
httpversion | HTTP プロトコルのバージョン | float (1.1 あるいは 1.0) | 1.1 |
adapter | 使用する接続アダプタクラス (項15.3. 「Zend_Http_Client - 接続アダプタ」 を参照ください) | mixed | 'Zend_Http_Client_Adapter_Socket' |
keepalive | サーバとの keep-alive 接続を有効にするかどうか。 同一サーバに連続してリクエストが発生する場合などに便利で、性能を向上させるでしょう。 | boolean | false |
シンプルな HTTP リクエストを実行するのは非常に簡単で、単に request() メソッドを実行するだけです。たったの三行ですんでしまいます。
例 15.2. シンプルな GET リクエストの処理
<?php require_once 'Zend/Http/Client.php'; $client = new Zend_Http_Client('http://example.org'); $response = $client->request(); ?>
request() メソッドには、オプションでパラメータを指定することができます。 このパラメータはリクエストメソッドで、HTTP プロトコルで定義されている GET、POST、PUT、HEAD、DELETE、TRACE、OPTIONS そして CONNECT のいずれかを指定可能です。 [1]. 利便性を高めるため、これらはすべてクラス定数として定義されています。たとえば Zend_Http_Request::GET、Zend_Http_Request::POST などのようになっています。
メソッドを指定しない場合は、直近の setMethod() コールで指定されたメソッドを使用します。 setMethod() もコールされていない場合は、デフォルトのリクエストメソッドとして GET を使用します (上の例を参照ください)。
例 15.3. GET 以外のリクエストメソッドの使用
<?php // POST リクエストを実行します $response = $client->request('POST'); // POST リクエストを実行するためのもうひとつの方法です $client->setMethod(Zend_Http_Client::POST); $response = $client->request(); ?>
GET パラメータを HTTP リクエストに追加するのは簡単です。 URL の一部として指定するか、あるいは setParameterGet() メソッドを使用します。 このメソッドは、GET パラメータの名前を最初の引数、そして GET パラメータの値を二番目の引数として受け取ります。 さらに便利に使用するため、setParameterGet() メソッドでは name => value 形式の連想配列で GET 変数を指定することもできます。 これは、複数の GET パラメータを指定する必要がある場合に便利です。
例 15.4. GET パラメータの設定
<?php // setParameterGet メソッドで GET パラメータを指定します $client->setParameterGet('knight', 'lancelot'); // このような URL を指定するのと同じことです $client->setUri('http://example.com/index.php?knight=lancelot'); // 複数のパラメータを一度に追加します $client->setParameterGet(array( 'first_name' => 'Bender', 'middle_name' => 'Bending' 'made_in' => 'Mexico', )); ?>
GET パラメータはあらゆるリクエストメソッドで送信できますが、 POST パラメータは POST リクエストの本文としてしか送信できません。 POST パラメータをリクエストに追加する方法は、GET パラメータを追加する場合と非常に似ています。 使用するのは setParameterPost() メソッドで、このメソッドの使用法は setParameterGet() メソッドと同じです。
例 15.5. POST パラメータの設定
<?php // POST パラメータを設定します $client->setParameterPost('language', 'fr'); // 複数の POST パラメータを設定します。そのうちのひとつは複数の値を持ちます。 $client->setParameterPost(array( 'language' => 'es', 'country' => 'ar', 'selection' => array(45, 32, 80) )); ?>
POST リクエストを送信する際には、GET パラメータと POST パラメータの両方を設定できることに注意しましょう。 一方、POST パラメータを POST 以外のリクエストで指定しても何のエラーも発生しませんが、 これは無意味です。POST 以外のリクエストでは、 POST パラメータを指定しても無視されます。
Zend_Http_Client では、そのクライアントオブジェクトが
直近に送信したリクエストおよび
直近に受信したレスポンスにアクセスするためのメソッドを提供しています。
Zend_Http_Client->getLastRequest()
は何もパラメータを受け取らず、クライアントが直近に送信した
HTTP リクエストを文字列で返します。同様に
Zend_Http_Client->getLastResponse()
は、
クライアントが直近に受信した HTTP レスポンスを
Zend_Http_Response
オブジェクトで返します。