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
).
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 optionales Array mit
Konfigurationsparametern. Beides kann ausgelassen und später durch Verwendung der
setUri() and setConfig() Methoden gesetzt werden.
Ein Zend_Http_Client Objekt instanzieren 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));
]]>
Zend_Http_Client verwendet Zend_Uri_Http um URLs zu prüfen. Das bedeutet das 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 'allow_unwise' Option von Zend_Uri auf 'true'
gesetzt wird. Siehe für mehr
Informationen.
Konfigurationsparameter
Der Konstruktor und die setConfig() Methode akzeptieren ein assoziatives Array mit
Konfigurationsparametern. Das Setzen dieser Parameter ist optional, da alle einen
Standardwert haben.
Zend_Http_Client KonfigurationsparameterParameterBeschreibungErwartete WerteStandardwertmaxredirectsMaximale Anzahl von zu folgenden Umleitungen (0 = keine)integer5strictOb Prüfungen an Headernamen durchzuführen sind. Einige
Prüf-Funktionen werden übersprungen wenn auf false gesetzt.
Sollte normalerweise nicht geändert werdenbooleantruestrictredirectsOb beim Umleiten genau dem RFC zu folgen ist (siehe
)booleanfalseuseragentString zur Identifizierung des User Agents (gesendet in den
Anfrageheadern)string'Zend_Http_Client'timeoutZeitüberschreitung für Verbindungen (Sekunden)integer10httpversion
Version des HTTP Protokolls (normalerweise '1.1' oder '1.0')
string'1.1'adapterZu verwendene Adapterklasse für die Verbindung (siehe
)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.
booleanfalsestoreresponse
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.
booleantrue
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:
Durchführen einer einfache GET Anfragerequest();
]]>
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.
Siehe RFC 2616 - .
.
Zur Erleichterung 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 verwendenrequest('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 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.
Setzen von GET ParameternsetParameterGet('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..
Setzen von POST ParameternsetParameterPost('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 bietet Methoden um Zugriff auf die letzte gesendete Anfrage und die
letzte empfangene Antwort des Client Objekts zu bekommen.
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.