第8章 Zend_Http

目次

8.1. Zend_Http_Client
8.1.1. 導入
8.1.2. HTTP ヘッダを指定した、基本的な GET リクエスト
8.1.3. 複数のドメインに対するリクエスト
8.1.4. HTTP タイムアウトの変更
8.1.5. HTTP ヘッダの動的な設定
8.1.6. HTTP POST、PUT および DELETE リクエストの作成
8.2. Zend_Http_Response
8.2.1. 導入

8.1. Zend_Http_Client

8.1.1. 導入

Zend_Http_Client は、HTTP リクエストを扱うための易しいインターフェイスを提供します。 Zend_Http_Client が扱うことのできるリクエストメソッドは GET、POST、PUT および DELETE です。

[注意] 注意
Zend_Http_Client は、デフォルトでは 5 段階までの HTTP リダイレクトを追いかけます。この振る舞いを変更するには、 最大値として指定したい数値を get() メソッドに渡します。

例 8.1. 基本的な GET リクエストの実行

<?php
    require_once 'Zend/Http/Client.php';
    try {
        $http = new Zend_Http_Client('http://example.org');
        $response = $http->get();
        if ($response->isSuccessful()) {
            echo $response->getBody();
        } else {
            echo '<p>エラーが発生しました</p>';
        }
    } catch (Zend_Http_Client_Exception $e) {
        echo '<p>エラーが発生しました (' .$e->getMessage(). ')</p>';
    }
    ?>

8.1.2. HTTP ヘッダを指定した、基本的な GET リクエスト

Zend_Http_Client のコンストラクタで、HTTP リクエストを送信するための Zend_Http_Client のインスタンスを作成します。

単一の URL に対して Zend_Http_Client を使用する場合は、 たいていの場合は以下の例のように コンストラクタ で URL および関連するヘッダを指定します。

例 8.2. 基本的な Zend_Http_Client の作成

<?php
    require_once 'Zend/Http/Client.php';

    // URL とヘッダを指定します
    $http = new Zend_Http_Client('http://example.org', 'Accept: text/html');
    ?>       

例 8.3. 複数のヘッダの送信

<?php
    require_once 'Zend/Http/Client.php';

    // URL と複数のヘッダを指定します
    $http = new Zend_Http_Client('http://example.org',
                            array('Accept: text/html', 'Accept-Language: en-us,en;q=0.5'));
    ?>       

Zend_Http_Client複数の URL に対してリクエストを送信したい場合は、 項8.1.3. 「複数のドメインに対するリクエスト」 を参照ください。

8.1.3. 複数のドメインに対するリクエスト

Zend_Http_Client で複数のドメインに対してリクエストを送信するには、 Zend_Http_Client::setUri() を使用して URL を指定します。

[注意] 注意

これは、例えば複数の RSS フィードを取得する場合などに有用です。

例 8.4. 複数のドメインに対するリクエスト

<?php
    require_once 'Zend/Http/Client.php';

    // クライアントオブジェクトのインスタンスを作成します
    $http = new Zend_Http_Client();

    // Slashdot のメインフィードの URI を指定します
    $http->setUri('http://rss.slashdot.org/Slashdot/slashdot');

    // フィードを取得します
    $slashdot = $http->get();

    // BBC ニュースのフィードを設定します
    $http->setUri('http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml');

    // フィードを取得します
    $bbc = $http->get();
    ?>   

8.1.4. HTTP タイムアウトの変更

Zend_Http_Client::setTimeout() により、 HTTP 接続のタイムアウト秒数を設定することができます。

[注意] 注意

デフォルト値は 10 秒です。

8.1.5. HTTP ヘッダの動的な設定

Zend_Http_Client::setHeaders() を使用して、 ヘッダの 配列 を渡すことができます。

[重要項目] 重要項目

ヘッダは、 Header: value 形式でなければなりません。

8.1.6. HTTP POST、PUT および DELETE リクエストの作成

Zend_Http_Client で HTTP POST、PUT および DELETE リクエストを実行するためのメソッドは、それぞれ post()put() および delete() となります。post() および put() は、文字列のパラメータ $data を受け取ります。 これは、適切にエンコードされた文字列でなければなりません。例えば name=value&foo=bar のようになります。 delete() メソッドはパラメータをとりません。

例 8.5. Zend_Http_Client による POST データの送信

<?php
    require_once 'Zend/Http/Client.php';

    // クライアントオブジェクトのインスタンスを作成します
    $http = new Zend_Http_Client();

    // POST データを処理する URI を設定します
    $http->setUri('http://example.org/post/processor');

    // 特定の GET 変数を HTTP POST データとして保存します
    $postData = 'foo=' . urlencode($_GET['foo']) . '&bar=' . urlencode($_GET['bar']);

    // HTTP POST リクエストを送信し、HTTP レスポンスを保存します
    $httpResponse = $http->post($postData);
    ?>   

PUT リクエストの作成方法は、上の例での POST リクエストの場合と同じで、単に post() メソッドを put() に置き換えるだけです。