導入 Zend_Http_Client は、Hyper-Text Transfer Protocol (HTTP) リクエストを簡単に扱うためのインターフェイスを提供します。 Zend_Http_Client は、HTTP クライアントとしての最低限の機能をサポートしているだけでなく、 HTTP 認証やファイルのアップロードといった高度な機能もサポートしています。 リクエストに成功すると (失敗しても) Zend_Http_Response オブジェクトを返します。これを使用すると、レスポンスのヘッダや本文にアクセスできます (このセクションを参照して下さい)。 Zend_Http_Client の使用法 クラスのコンストラクタには、オプションの引数として URL を指定できます (文字列か Zend_Uri_Http オブジェクトのどちらでも可能です)。 また、配列あるいは Zend_Config オブジェクトで設定オプションを指定することもできます。 どちらも省略することが可能で、その場合は後から setUri() メソッドや setConfig() メソッドで指定します。 Zend_Http_Client のインスタンスの作成 0, 'timeout' => 30)); // これは、上とまったく同じことです $client = new Zend_Http_Client(); $client->setUri('http://example.org'); $client->setConfig(array( 'maxredirects' => 0, 'timeout' => 30)); // Zend_Config オブジェクトを使ってクライアントの設定を行うこともできます $config = new Zend_Config_Ini('httpclient.ini', 'secure'); $client->setConfig($config); ]]> Zend_Http_ClientZend_Uri_Http を用いて URL を検証します。 つまり、URL 中にあるパイプ記号 ('|') やキャレット記号 ('^') などの特殊文字はデフォルトでは許可されないということです。 これを変更するには、Zend_Uri のオプション 'allow_unwise' を 'TRUE' に設定します。詳細は このセクション を参照ください。 設定パラメータ コンストラクタおよび setConfig() メソッドでは、 設定パラメータの連想配列あるいは Zend_Config オブジェクトを受け取ります。 これらのパラメータは、設定してもしなくてもかまいません。 すべてのパラメータにはデフォルト値があります。 Zend_Http_Client の設定パラメータ パラメータ 説明 期待する値 デフォルト値 maxredirects リダイレクトをたどる最大数 (0 = たどらない) integer 5 strict ヘッダ名の検証を行うかどうか。 FALSE に設定すると、検証関数をスキップします。 通常はこれを変更してはいけません。 boolean TRUE strictredirects リダイレクトの際に RFC に厳密に従うかどうか (このセクションを参照ください) boolean FALSE useragent ユーザエージェントを表す文字列 (リクエストヘッダに付加されます) string 'Zend_Http_Client' timeout 接続タイムアウト秒数 integer 10 httpversion HTTP プロトコルのバージョン (通常は '1.1' あるいは '1.0') string '1.1' adapter 使用する接続アダプタクラス (このセクションを参照ください) mixed 'Zend_Http_Client_Adapter_Socket' keepalive サーバとの keep-alive 接続を有効にするかどうか。 同一サーバに連続してリクエストが発生する場合などに便利で、 性能を向上させるでしょう。 boolean FALSE storeresponse 直近のレスポンスを保存して後から getLastResponse() で取得できるようにするかどうか。 FALSE の場合、 getLastResponse()NULL を返します。 boolean TRUE encodecookies Whether to pass the cookie value through urlencode/urldecode. Enabling this breaks support with some web servers. Disabling this limits the range of values the cookies can contain. boolean TRUE
基本的な HTTP リクエストの処理 シンプルな HTTP リクエストを実行するのは非常に簡単で、単に request() メソッドを実行するだけです。たったの三行ですんでしまいます。 シンプルな GET リクエストの処理 request(); ]]> request() メソッドには、オプションでパラメータを指定できます。 このパラメータはリクエストメソッドで、HTTP プロトコルで定義されている GETPOSTPUTHEADDELETETRACEOPTIONS そして CONNECT のいずれかを指定可能です。 RFC 2616 - を参照ください。 利便性を高めるため、これらはすべてクラス定数として定義されています。たとえば Zend_Http_Client::GET、Zend_Http_Client::POST などのようになっています。 メソッドを指定しない場合は、直近の setMethod() コールで指定されたメソッドを使用します。 setMethod() もコールされていない場合は、デフォルトのリクエストメソッドとして GET を使用します (上の例を参照ください)。 GET 以外のリクエストメソッドの使用 request('POST'); // POST リクエストを実行するためのもうひとつの方法です $client->setMethod(Zend_Http_Client::POST); $response = $client->request(); ]]> GET や POST へのパラメータの追加 GET パラメータを HTTP リクエストに追加するのは簡単です。 URL の一部として指定するか、あるいは setParameterGet() メソッドを使用します。 このメソッドは、GET パラメータの名前を最初の引数、そして GET パラメータの値を二番目の引数として受け取ります。 さらに便利に使用するため、setParameterGet() メソッドでは name => value 形式の連想配列で GET 変数を指定することもできます。 これは、複数の GET パラメータを指定する必要がある場合に便利です。 GET パラメータの設定 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() メソッドと同じです。 POST パラメータの設定 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 オブジェクトで返します。