# 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

    $client = new Zend_Http_Client('http://example.org', array(
        'maxredirects' => 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

    $client = new Zend_Http_Client('http://example.org');
    $response = $client->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

    // 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();

## 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

    // Setzen eines GET-Parameters mit der Methode setParameterGet
    $client->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

    // 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.

## 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.