第13章 Zend_Http
前のページ |  | 次のページ

## 第13章 Zend_Http

## 13.1. Zend_Http_Client - 導入

### 13.1.1. 導入

Zend_Http_Client は、Hyper-Text Transfer Protocol (HTTP) リクエストを簡単に扱うためのインターフェイスを提供します。 Zend_Http_Client は、HTTP クライアントとしての最低限の機能をサポートしているだけでなく、 HTTP 認証やファイルのアップロードといった高度な機能もサポートしています。 リクエストに成功すると (失敗しても) Zend_Http_Response オブジェクトを返します。これを使用すると、レスポンスのヘッダや本文にアクセスできます (項13.5. 「Zend_Http_Response」 を参照ください)。

クラスのコンストラクタには、オプションの引数として URL を指定することができます (文字列か Zend_Uri_Http オブジェクトのどちらでも可能です)。 また、オプションで設定パラメータの配列を指定することもできます。 どちらも省略することが可能で、その場合は後から setUri() メソッドや setConfig() メソッドで指定します。

例 13.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));

    ?>

### 13.1.2. 設定パラメータ

コンストラクタおよび setConfig() メソッドでは 設定パラメータの連想配列を受け取ります。 これらのパラメータは、設定してもしなくてもかまいません。 すべてのパラメータにはデフォルト値があります。

表 13.1. Zend_Http_Client の設定パラメータ

パラメータ | 説明 | 期待する値 | デフォルト値
--- | --- | --- | ---
maxredirects | リダイレクトをたどる最大数 (0 = たどらない) | integer | 5
strictredirects | リダイレクトの際に RFC に厳密に従うかどうか (項13.2.1. 「HTTP リダイレクト」 を参照ください) | boolean | false
useragent | ユーザエージェントを表す文字列 (リクエストヘッダに付加されます) | string | 'Zend_Http_Client'
timeout | 接続タイムアウト秒数 | integer | 10
httpversion | HTTP プロトコルのバージョン | float (1.1 あるいは 1.0) | 1.1
adapter | 使用する接続アダプタクラス (項13.3. 「Zend_Http_Client - 接続アダプタ」 を参照ください) | mixed | 'Zend_Http_Client_Adapter_Socket'
keepalive | サーバとの keep-alive 接続を有効にするかどうか。 同一サーバに連続してリクエストが発生する場合などに便利で、性能を向上させるでしょう。 | boolean | false

### 13.1.3. 基本的な HTTP リクエストの処理

シンプルな HTTP リクエストを実行するのは非常に簡単で、単に request() メソッドを実行するだけです。たったの三行ですんでしまいます。

例 13.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 を使用します (上の例を参照ください)。

例 13.3. GET 以外のリクエストメソッドの使用

    <?php
        // POST リクエストを実行します
        $response = $client->request('POST');

        // POST リクエストを実行するためのもうひとつの方法です
        $client->setMethod(Zend_Http_Client::POST);
        $response = $client->request();
    ?>

### 13.1.4. GET や POST へのパラメータの追加

GET パラメータを HTTP リクエストに追加するのは簡単です。 URL の一部として指定するか、あるいは setParameterGet() メソッドを使用します。 このメソッドは、GET パラメータの名前を最初の引数、そして GET パラメータの値を二番目の引数として受け取ります。 さらに便利に使用するため、setParameterGet() メソッドでは name => value 形式の連想配列で GET 変数を指定することもできます。 これは、複数の GET パラメータを指定する必要がある場合に便利です。

例 13.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() メソッドと同じです。

例 13.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 パラメータを指定しても無視されます。

[1] RFC 2616 - http://www.w3.org/Protocols/rfc2616/rfc2616.html を参照ください。

前のページ |  | 次のページ
12.9. Gdata の例外の捕捉 | ホーム | 13.2. Zend_Http_Client - 高度な使用法