Hoofdstuk 11. Zend_Http

Inhoudsopgave

11.1. Zend_Http_Client
11.1.1. Inleiding
11.1.2. Basis GET verzoeken met gespecificeerde HTTP Headers
11.1.3. Multidomein verzoeken
11.1.4. De HTTP Timeout wijzigen
11.1.5. Dynamisch HTTP Headers zetten
11.1.6. POST, PUT en DELETE HTTP verzoeken maken
11.2. Zend_Http_Client - Advanced Usage
11.2.1. HTTP Redirections
11.2.2. Adding Cookies and Using Cookie Persistence
11.2.3. Setting Custom Request Headers
11.2.4. File Uploads
11.2.5. Sending Raw POST Data
11.2.6. HTTP Authentication
11.2.7. Sending Multiple Requests With the Same Client
11.3. Zend_Http_Client - Connection Adapters
11.3.1. Overview
11.3.2. The Socket Adapter
11.3.3. The Proxy Adapter
11.3.4. The Test Adapter
11.3.5. Creating your own connection adapters
11.4. Zend_Http_Cookie and Zend_Http_CookieJar
11.4.1. Inleiding
11.4.2. Instantiating Zend_Http_Cookie Objects
11.4.3. Zend_Http_Cookie getter methods
11.4.4. Zend_Http_Cookie: Matching against a scenario
11.4.5. The Zend_Http_CookieJar Class: Instantiation
11.4.6. Adding Cookies to a Zend_Http_CookieJar object
11.4.7. Retrieving Cookies From a Zend_Http_CookieJar object
11.5. Zend_Http_Response
11.5.1. Inleiding

11.1. Zend_Http_Client

11.1.1. Inleiding

Zend_Http_Client verstrekt een eenvoudige interface om HTTP verzoeken te maken. Zend_Http_Client kan GET, POST, PUT en DELETE verzoeken maken.

[Opmerking] Opmerking

Zend_HttpClient volgt standaard tot 5 HTTP verwijzingen. Om dit gedrag te veranderen geef je het maximum toegestane verwijzingen aan de get() methode op.

Voorbeeld 11.1. Een basis GET verzoek maken

<?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>Er trad een fout op</p>';
        }
    } catch (Zend_Http_Client_Exception $e) {
        echo '<p>Er trad een fout op (' .$e->getMessage(). ')</p>';
    }
    ?>

11.1.2. Basis GET verzoeken met gespecificeerde HTTP Headers

De Zend_Http_Client constructor maakt een Zend_Http_Client instantie om HTTP verzoeken te zenden.

Als je Zend_Http_Client gebruikt op één enkele URL kan je in de meeste gevallen de URL en relevante headers aan de constructor geven, zoals in de volgende voorbeelden:

Voorbeeld 11.2. Een Basis Zend_Http_Client maken

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

    // Specificeer de URL en een enkele header
    $http = new Zend_Http_Client('http://example.org', 'Accept: text/html');
    ?>       

Voorbeeld 11.3. Meerdere Headers sturen

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

    // Specificeer de URL en meerdere headers
    $http = new Zend_Http_Client('http://example.org',
                            array('Accept: text/html', 'Accept-Language: en-us,en;q=0.5'));
    ?>       

Als je Zend_Http_Client wenst te gebruiken om verzoeken aan meerdere URLs te sturen, zie dan Paragraaf 11.1.3, “Multidomein verzoeken”

11.1.3. Multidomein verzoeken

Zend_Http_Client ondersteunt het sturen van verzoeken aan meerdere domeinen door het zetten van de URL via de methode Zend_Http_Client::setUri().

[Opmerking] Opmerking

Een geweldig gebruik hiervoor is als je meerdere RSS feeds uitleest.

Voorbeeld 11.4. Multidomein verzoek

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

    // Het client object instantiëren
    $http = new Zend_Http_Client();

    // De URI naar Slashdot's hoofd feed zetten
    $http->setUri('http://rss.slashdot.org/Slashdot/slashdot');

    // De feed opvragen
    $slashdot = $http->get();

    // Nu de BBC news feed instellen
    $http->setUri('http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml');

    // de feed opvragen
    $bbc = $http->get();
    ?>   

11.1.4. De HTTP Timeout wijzigen

Zend_Http_Client::setTimeout() laat je toe de timeout voor de HTTP verbinding te zetten, in seconden.

[Opmerking] Opmerking

De standaard timeout is 10 seconden.

11.1.5. Dynamisch HTTP Headers zetten

Je kan een array headers zetten met Zend_Http_Client::setHeaders().

[Belangrijk] Belangrijk

Headers moeten het formaat volgen: Header: waarde

11.1.6. POST, PUT en DELETE HTTP verzoeken maken

Het maken van POST, PUT en DELETE HTTP verzoeken wordt vereenvoudigd in Zend_Http_Client door middel van drie methodes: post(), put(), en delete(), respectievelijk. De post() en put() methodes aanvaarden elk één string parameter, $data, waarin een string met de data correct ge-encodeerd zoals volgt: name=value&foo=bar. De delete() methode heeft geen parameters.

Voorbeeld 11.5. POST data verzenden met Zend_Http_Client

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

    // Het client object instantiëren
    $http = new Zend_Http_Client();

    // De URI naar een POST dataverwerker zetten
    $http->setUri('http://example.org/post/processor');

    // De specifieke GET variabelen als HTTP POST data opslaan
    $postData = 'foo=' . urlencode($_GET['foo']) . '&bar=' . urlencode($_GET['bar']);

    // Het HTTP POST verzoek maken en het HTTP antwoord opslaan
    $httpResponse = $http->post($postData);
    ?>   

Een PUT verzoek maken is hetzelfde als in het voorgaande voorbeeld om een POST verzoek te maken; je hoeft slechts de put() methode gebruiken in plaats van de post() methode.