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

## 第9章 Zend_Http

## 9.1. Zend_Http_Client

### 9.1.1. 導入

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

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

例 9.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>';
    }
    ?>

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

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

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

例 9.2. 基本的な Zend_Http_Client の作成

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

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

例 9.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 に対してリクエストを送信したい場合は、 項9.1.3. 「複数のドメインに対するリクエスト」 を参照ください。

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

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

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

例 9.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();
        ?>

### 9.1.4. HTTP タイムアウトの変更

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

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

### 9.1.5. HTTP ヘッダの動的な設定

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

| 重要項目
ヘッダは、 ``Header: value`` 形式でなければなりません。

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

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

例 9.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()` に置き換えるだけです。

前のページ |  | 次のページ
8.2. Zend_Filter_Input | ホーム | 9.2. Zend_Http_Response