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 ausgelassen und später durch Verwendung der setUri() and
setConfig() Methoden gesetzt werden.
Example #1 Ein Zend_Http_Client Objekt instanzieren
$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));
// 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);
Note:
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 diesen Abschnitt für mehr
Informationen.
Konfigurationsparameter
Der Konstruktor und die setConfig() Methode akzeptieren ein assoziatives Array mit
Konfigurationsparametern oder ein Zend_Config Objekt. Das Setzen
dieser Parameter ist optional, da alle einen Standardwert haben.
Zend_Http_Client Konfigurationsparameter
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üf-Funktionen 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 verwendene 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
aufeinanderfolgend Anfragen an den selben 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 request() Methode gemacht werden und benötigt selten mehr als drei
Codezeilen:
Example #2 Durchführen einer einfache GET Anfrage
$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.
[1]
http://www.w3.org/Protocols/rfc2616/rfc2616.html
.
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).
Example #3 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 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.
Example #4 Setzen von GET Parametern
// 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..
Example #5 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 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.