Zend_Http_Response
Einführung
Zend_Http_Response stellt den einfachen Zugriff auf eine
HTTP Rückantwort sowie einige statische Methoden zum Analysieren der
HTTP Rückantworten bereit. Normalerweise wird
Zend_Http_Response als ein Objekt verwendet, dass von einer
Zend_Http_Client Anfrage zurückgegeben wurde.
In den meisten Fällen wird ein Zend_Http_Response Objekt über die fromString() Methode
instanziert, die einen String liest, der eine HTTP Rückantwort enthält und ein
Zend_Http_Response Objekt zurückgibt.
Ein Zend_Http_Response Object über die factory Methode instanzieren
Man kann auch die Konstruktormethode verwenden, um ein neues Response Objekt zu
erstellen, indem man alle Parameter für die Antwort angibt:
public function __construct($code, $headers, $body = null, $version = '1.1',
$message = null)
$code: Der HTTP Antwortcode(eg. 200, 404,
etc.)
$headers: Ein assoziatives Array mit HTTP
Antwort Headers (z.B. 'Host' => 'example.com')
$body: Der Hauptteil der Antwort als String
$version: Der Version der HTTP Antwort
(normalerweise 1.0 oder 1.1)
$message: Die HTTP Rückantwort (z.B. 'OK',
'Internal Server Error'). Falls nicht angegeben, wird die Rückantwort anhand des
Antwortcode gesetzt.
Boolesche Testmethoden
Sobald ein Zend_Http_Response Objekt instantiert ist, stellt es
mehrere Methoden bereit, die zum Testen des Typs der Antwort verwendet werden können.
Diese geben alle ein boolesches TRUE oder
FALSE zurück:
Boolean isSuccessful(): Ob die Anfrage erfolgreoch war oder
nicht. Gibt TRUE für HTTP 1xx und
2xx Antwortcodes zurück.
Boolean isError(): Ob der Antwortcode auf einen Fehler
rückschließen lässt oder nicht. Gibt TRUE für
HTTP 4xx (Client Fehler) und 5xx (Server Fehler)
Antwortcodes zurück.
Boolean isRedirect(): Ob die Antwort eine Weiterleitung ist
oder nicht. Gibt TRUE für HTTP 3xx
Antwortcodes zurück.
Die isError() Method verwenden, um eine Antwort zu validieren
isError()) {
echo "Error transmitting data.\n"
echo "Server reply was: " . $response->getStatus() .
" " . $response->getMessage() . "\n";
}
// .. verarbeite die Antwort hier...
]]>
Zugriffsmethoden
Der Hauptzweck eines Response Okjektes ist der einfache Zugriff auf diverse
Antwortparameter.
int getStatus(): Erhalte den HTTP
Antwortstatuscode (z.B. 200, 504, etc.) zurück
string getMessage(): Erhalte die HTTP
Antwortstatus Meldung (z.B. "Not Found", "Authorization Required") zurück.
string getBody(): Erhalte den kompletten dekodierten Hauptteil
der HTTP Antwort zurück
string getRawBody(): Erhalte die rohen, möglicherweise
kodierten Hauptteil der HTTP Antwort zurück. Wenn der
Hauptteil z.B. mittels GZIP kodiert wurde, wird er nicht dekodiert.
array getHeaders(): Erhalte die HTTP Antwort
Header als assoziatives Array (z.B. 'Content-type' => 'text/html') zurück.
string|array getHeader($header): Erhalte einen spezifischen
HTTP Antwort Header zurück, der durch $header angegeben
wird.
string getHeadersAsString($status_line = true, $br = "\n"):
Erhalte den kompletten Header Satz als String zurück. Wenn $status_line
auf TRUE gesetzt ist (Standardwert), wird die erste
Statuszeile (z.B. "HTTP/1.1 200 OK") ebenfalls zurück gegeben. Die Zeilen
werden durch den $br Parameter umgebrochen (kann z.B. "<br />" sein).
string asString($br = "\n"): Erhalte die komplette Rückantwort
als String zurück. Die Zeilen werden durch den $br Parameter umgebrochen
(kann z.B. "<br />" sein). Man kann auch die matische __toString()
Methode verwenden wenn man das Objekt in einen String casten will. Diese
wird dann auf asString() weiterleiten
Zend_Http_Response Zugriffsmethoden verwenden
getStatus() == 200) {
echo "The request returned the following information:
";
echo $response->getBody();
} else {
echo "An error occurred while fetching data:
";
echo $response->getStatus() . ": " . $response->getMessage();
}
]]>
Immer die Rückgabewerte prüfen
Weil eine Antwort mehrere Instanzen des selben Headers beinhalten kann, können
die getHeader() Methode und getHeaders() Methode entweder einen einzelnen String
oder ein Array mit Strings für jeden Header zurückgeben. Man sollte immer
prüfen, ob der Rückgabewert ein String oder ein Array ist.
Auf Antwort Header zugreifen
getHeader('Content-type');
if (is_array($ctype)) $ctype = $ctype[0];
$body = $response->getBody();
if ($ctype == 'text/html' || $ctype == 'text/xml') {
$body = htmlentities($body);
}
echo $body;
]]>
Statische HTTP Antwortanalysierer
Die Zend_Http_Response Klasse beinhaltet auch verschiedene,
intern verwendete Methoden für die Verarbeitung und Analyse der HTTP
Rückantworten bereit. Diese Methoden sind alle als statische Methoden eingerichtet, so
dass man sie extern verwenden kann, ohne dass man ein Response Objekt instanzierebn muss
und nur einen bestimmten Teil der Antwort extrahieren möchte.
int Zend_Http_Response::extractCode($response_str): Extrahiere
den HTTP Antwortcode (z.B. 200 oder 404) von
$response_str und gebe ihn zurück.
string Zend_Http_Response::extractMessage($response_str):
Extrahiere die HTTP Rückantwort (z.B. "OK" oder
"File Not Found") von $response_str und gebe sie zurück.
string Zend_Http_Response::extractVersion($response_str): :
Extrahiere die HTTP Version (z.B. 1.1 oder 1.0) von
$response_str und gebe sie zurück.
array Zend_Http_Response::extractHeaders($response_str):
Extrahiere die HTTP Antwort Header von response_str und
gebe sie in einem Array zurück.
string Zend_Http_Response::extractBody($response_str):
Extrahiere den HTTP Antworthauptteil aus $response_str
und gebe ihn zurück.
string Zend_Http_Response::responseCodeAsText($code = null, $http11 =
true): Erhalte die Standard HTTP Rückantwort für
einen Antwortcode $code. Zum Beispiel wird "Internal Server Error"
zurückgegeben, wenn $code gleich 500 ist. Wenn $http11 gleich
TRUE ist (Standard), werden die
HTTP/1.1 Standardantworten zurück gegeben, andernfalls
die HTTP/1.0 Antworten. Wird $code nicht angegeben, wird
diese Methode alle bekannten HTTP Antwortcodes als
assoziatives Array (code => message) zurückgeben.
Neben der Analysemethoden beinhaltet die Klasse auch einen Satz von Dekodieren für
allgemein HTTP Antwort Transferkodierungen:
string Zend_Http_Response::decodeChunkedBody($body): Dekodiere
einen kompletten "Content-Transfer-Encoding: Chunked" Hauptteil
string Zend_Http_Response::decodeGzip($body): Dekodiere
einen "Content-Encoding: gzip" Hauptteil
string Zend_Http_Response::decodeDeflate($body): Dekodiere
einen "Content-Encoding: deflate" Hauptteil