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 diesen Abschnitt). Zend_Http_Client verwenden Der Klassenkonstruktor akzeptiert optional eine URL als seinen ersten Parameter (kann entweder ein String oder ein Zend_Uri_Http-Objekt sein) und ein Array oder Zend_Config-Objekt, welches Konfigurationsparameter enthält. Beides kann weggelassen und später durch Verwendung der Methoden setUri() und setConfig() gesetzt werden. Ein Zend_Http_Client Objekt instanzieren 0, 'timeout' => 30)); // Dies macht genau dasselbe: $client = new Zend_Http_Client(); $client->setUri('http://example.org'); $client->setConfig(array( 'maxredirects' => 0, 'timeout' => 30)); // Man kann auch ein Zend_Config Objekt verwenden um die Konfiguration // des Clients zu setzen $config = new Zend_Config_Ini('httpclient.ini', 'secure'); $client->setConfig($config); ]]> Zend_Http_Client verwendet Zend_Uri_Http um URLs zu prüfen. Das bedeutet, dass einige spezielle Zeichen wie das Pipe-Symbol ('|') oder das Karet Symbol ('^') in der URL standardmäßig nicht akzeptiert werden. Das kann geändert werden, indem die Option 'allow_unwise' von Zend_Uri auf 'TRUE' gesetzt wird. Siehe diesen Abschnitt für mehr Informationen. Konfigurationsparameter Der Konstruktor und die Methode setConfig() akzeptieren ein assoziatives Array mit Konfigurationsparametern oder ein Zend_Config-Objekt. Das Setzen dieser Parameter ist optional, da alle einen Standardwert haben. Konfigurationsparameter von Zend_Http_Client Parameter Beschreibung Erwartete Werte Standardwert maxredirects Maximale Anzahl von zu folgenden Umleitungen (0 = keine) integer 5 strict Ob Prüfungen an Headernamen durchzuführen sind. Einige Prüffunktionen werden übersprungen, wenn auf FALSE gesetzt. Sollte normalerweise nicht geändert werden. boolean TRUE strictredirects Ob beim Umleiten genau dem RFC zu folgen ist (siehe diesen Abschnitt) boolean FALSE useragent String zur 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 (normalerweise '1.1' oder '1.0') string '1.1' adapter Zu verwendende Adapterklasse für die Verbindung (siehe diesen Abschnitt) 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 aufeinanderfolgende Anfragen an denselben Server ausgeführt werden. boolean FALSE storeresponse Ob die letzte Antwort für einen späteren Aufruf von getLastResponse() gespeichert werden soll. Wird sie auf FALSE gesetzt, gibt getLastResponse() NULL zurück. boolean TRUE encodecookies Ob der Cookie-Wert über urlencode oder urldecode übergeben werden soll oder nicht. Dessen Aktivierung verhindert die Unterstützung bei einigen Web-Servern. Dessen Deaktivierung limitiert den Bereich der Werte, die Cookies enthalten können. boolean TRUE
Durchführen von einfachen HTTP-Anfragen Das Durchführen von einfachen HTTP-Anfragen kann sehr leicht durch Verwendung der Methode request() gemacht werden und benötigt selten mehr als drei Codezeilen: Durchführen einer einfache GET-Anfrage request(); ]]> Die Methode request() akzeptiert einen optionalen Parameter - die Anfragemethode. Diese kann GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS oder CONNECT sein, wie im HTTP-Protokoll definiert. Siehe RFC 2616 - . . Der Bequemlichkeit halber sind alle als Klassenkonstanten definiert: Zend_Http_Client::GET, Zend_Http_Client::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). Andere Anfragemethoden als GET verwenden request('POST'); // Ein weiterer Weg, eine POST Anfrage durchzuführen $client->setMethod(Zend_Http_Client::POST); $response = $client->request(); ]]> 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 Methode setParameterGet() erfolgen. Diese Methode benötigt den Namen des GET-Parameters als seinen ersten Parameter und den Wert des GET-Parameters als seinen zweiten Parameter. Zur Erleichterung akzeptiert die Methode setParameterGet() auch ein einzelnes assoziatives Array mit GET-Parameter als Name => Wert Variablen, was beim Setzen von mehreren GET-Parametern komfortabler sein kann. Setzen von GET-Parametern setParameterGet('knight', 'lancelot'); // Dies ist äquivalent zum 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 Methode setParameterPost() gemacht werden, die vom Aufbau der Methode setParameterGet() ähnlich ist. Setzen von POST-Parametern 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. Zugriff auf die letzte Anfrage und Antwort Zend_Http_Client verfügt über Methoden für den Zugriff auf die letzte gesendete Anfrage und die letzte empfangene Antwort des Client-Objekts. Zend_Http_Client->getLastRequest() hat keine Parameter und gibt die letzte HTTP-Anfrage als String zurück, die der Client gesendet hat. Auf die gleiche Art und Weise gibt Zend_Http_Client->getLastResponse() die letzte HTTP-Antwort als Zend_Http_Response Objekt zurück, die der Client empfangen hat.