Kapitel 13. Zend_Http

Inhaltsverzeichnis

13.1. Zend_Http_Client - Einführung
13.1.1. Einführung
13.1.2. Konfigurationsparameter
13.1.3. Durchführen von einfachen HTTP Anfragen
13.1.4. Hinzufügen von GET und POST Parametern
13.2. Zend_Http_Client - Fortgeschrittende Nutzung
13.2.1. HTTP Umleitungen
13.2.2. Hinzufügen von Cookies und Verwendung von persistenten Cookies
13.2.3. Setzen von individuellen Anfrageheadern
13.2.4. Dateiuploads
13.2.5. Unverarbeitete POST Daten versenden
13.2.6. HTTP Authentifizierung
13.2.7. Versenden mehrerer Anfragen mit dem selben Client
13.3. Zend_Http_Client - Verbindungsadapter
13.3.1. Verbindungsadapter
13.3.2. The Socket Adapter
13.3.3. The Proxy Adapter
13.3.4. Der Test Adapter
13.3.5. Creating your own connection adapters
13.4. Zend_Http_Cookie and Zend_Http_CookieJar
13.4.1. Introduction
13.4.2. Instantiating Zend_Http_Cookie Objects
13.4.3. Zend_Http_Cookie getter methods
13.4.4. Zend_Http_Cookie: Matching against a scenario
13.4.5. The Zend_Http_CookieJar Class: Instantiation
13.4.6. Adding Cookies to a Zend_Http_CookieJar object
13.4.7. Retrieving Cookies From a Zend_Http_CookieJar object
13.5. Zend_Http_Response
13.5.1. Einführung
13.5.2. Boolesche Testmethoden
13.5.3. Zugriffsmethoden
13.5.4. Statische HTTP Antwortanalysierer

13.1. Zend_Http_Client - Einführung

13.1.1. Einführung

Zend_Http_Client stellt eine einfache Schnittstelle für das Durchführen von Hyper-Text Transfer Protocol (HTTP) Anfragen. Zend_Http_Client unterstützt die meisten einfachen Funktionen, die man von einem HTTP Client erwartet, sowie einige komplexere Funktionen, wie z.B. HTTP Authentifizierung und Dateiuploads. Erfolgreiche Anfragen (und die meisten nicht erfolgreichen ebenfalls) liefern ein Zend_Http_Response Objekt zurück, welches den Zugriff auf die Header und den Hauptteil der Antwort ermöglichen (siehe Abschnitt 13.5, „Zend_Http_Response“).

Der Klassenkonstruktor akzeptiert optional eine URL als seinen ersten Parameter (kann entweder ein String oder ein Zend_Uri_Http Objekt sein) und ein optionales Array mit Konfigurationsparametern. Beides kann ausgelassen und später durch Verwendung der setUri() and setConfig() Methoden gesetzt werden.

Beispiel 13.1. Ein Zend_Http_Client Objekt instanzieren

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

    $client = new Zend_Http_Client('http://example.org', array(
        'maxredirects' => 0,
        'timeout'      => 30));
        
    // Dies macht genau das selbe:
    $client = new Zend_Http_Client();
    $client->setUri('http://example.org');
    $client->setConfig(array(
        'maxredirects' => 0,
        'timeout'      => 30));

?>

13.1.2. Konfigurationsparameter

Der Konstruktor und die setConfig() Methode akzeptieren ein assoziatives Array mit Konfigurationsparametern. Das Setzen dieser Parameter ist optional, da alle einen Standardwert haben.

Tabelle 13.1. Zend_Http_Client Konfigurationsparameter

Parameter Beschreibung Erwartete Werte Standardwert
maxredirects Maximale Anzahl von zu folgenden Umleitungen (0 = keine) integer 5
strictredirects Ob beim Umleiten genau dem RFC zu folgen ist (siehe Abschnitt 13.2.1, „HTTP Umleitungen“) boolean false
useragent String zu Identifizierung des User Agents (gesendet in den Anfrageheadern) string 'Zend_Http_Client'
timeout Zeitüberschreitung für Verbindungen (Sekunden) integer 10
httpversion Version des HTTP Protokolls float (1.1 or 1.0) 1.1
adapter Zu verwendene Adapterklasse für die Verbindung (siehe Abschnitt 13.3, „Zend_Http_Client - Verbindungsadapter“) mixed 'Zend_Http_Client_Adapter_Socket'
keepalive Ob keep-alive Verbindungen mit dem Server aktiviert werden sollen. Nützlich und kann die Performance verbessern, wenn mehrere aufeinanderfolgend Anfragen an den selben Server ausgeführt werden. boolean false

13.1.3. Durchführen von einfachen HTTP Anfragen

Das Durchführen von einfachen HTTP Anfragen kann sehr leicht durch Verwendung der request() Methode gemacht werden und benötigt selten mehr als drei Codezeilen:

Beispiel 13.2. Durchführen einer einfache GET Anfrage

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

    $client = new Zend_Http_Client('http://example.org');
    $response = $client->request();
?>

Die request() Methode akzeptiert einen optionalen Parameter - die Anfragemethode. Diese kann GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS oder CONNECT sein, wie im HTTP Protokoll definiert. [2]. Zur Erleichterung sind alle als Klassenkonstanten definiert: Zend_Http_Request::GET, Zend_Http_Request::POST und so weiter.

Wenn keine Methode angegeben worden ist, wird die durch den letzten Aufruf von setMethod() gesetzte Methode verwendet. Wenn setMethod() vorher nicht aufgerufen worden ist, wird als Standardmethode GET verwendet (siehe obiges Beispiel).

Beispiel 13.3. Andere Anfragemethoden als GET verwenden

<?php
    // Durchführen einer POST Anfrage
    $response = $client->request('POST');
    
    // Ein weiterer Weg, eine POST Anfrage durchzuführen
    $client->setMethod(Zend_Http_Client::POST);
    $response = $client->request();
?>

13.1.4. Hinzufügen von GET und POST Parametern

Das Hinzufügen von GET Parametern zu einer HTTP Anfrage ist recht einfach und kann entweder über die Angabe als Teil der URL oder durch Verwendung der setParameterGet() Methode erfolgen. Diese Methode benötigt den Namen des GET Parameter als seinen ersten Parameter und den Wert des GET Parameter als seinen zweiten Parameter. Zur Erleichterung akzeptiert die setParameterGet() Methode auch ein einzelnes assoziatives Array mit GET Parameter als Name => Wert Variablen, was beim setzen von mehreren GET Parametern komfortabler sein kann.

Beispiel 13.4. Setzen von GET Parametern

<?php
    // Setzen eines GET Parameter mit der setParameterGet Methode
    $client->setParameterGet('knight', 'lancelot');

    // Dies ist äquivalent durch Setzen der URL:
    $client->setUri('http://example.com/index.php?knight=lancelot');
    
    // Hinzufügen mehrerer Parameter durch einen Aufruf
    $client->setParameterGet(array(
        'first_name'  => 'Bender',
        'middle_name' => 'Bending'
        'made_in'     => 'Mexico',
    ));
?>

Während GET Parameter bei jeder Anfragemethode gesetzt werden können, können POST Parameter nur im Hauptteil von POST Anfragen versendet werden. Das Hinzufügen von POST Parameter zu einer Anfrage ist sehr ähnlich wie das Hinzufügen von GET Parametern and kann mit der setParameterPost() Methode gemacht werden, die vom Aufbau der setParameterGet() Methode ähnlich ist..

Beispiel 13.5. Setzen von POST Parametern

<?php
    // Setzen eines POST Parameters
    $client->setParameterPost('language', 'fr');
    
    // Hinzufügen von mehreren POST Parametern, eines davon mit mehreren Werten
    $client->setParameterPost(array(
        'language'  => 'es',
        'country'   => 'ar',
        'selection' => array(45, 32, 80)
    ));
?>

Beim Senden einer POST Anfrage ist zu beachten, dass man sowohl GET als auch POST Parameter setzen kann. Auf der anderen Seite wird durch das Setzen von POST Parametern für andere Anfragen als POST kein Fehler ausgeworfen. Solange eine Anfrage keine POST Anfrage ist, werden POST Parameter einfach ignoriert.