Zend_Http_Response
Einführung
Zend_Http_Response stellt den einfachen Zugriff auf eine
HTTP-Rückantwort sowie einige statische Methoden zur Analyse der
HTTP-Rückantworten bereit. Normalerweise wird
Zend_Http_Response als ein Objekt verwendet, das von einer
Zend_Http_Client-Anfrage zurückgegeben wurde.
In den meisten Fällen wird ein Zend_Http_Response-Objekt über die
Methode fromString() instanziert, die einen String liest, der eine
HTTP-Rückantwort enthält und ein
Zend_Http_Response-Objekt zurückgibt.
Example #1 Ein Zend_Http_Response-Objekt über die Factory-Methode instanzieren
$str = '';
$req = "GET / HTTP/1.1\r\n" .
"Host: www.example.com\r\n" .
"Connection: close\r\n" .
"\r\n";
while ($buff = fread($sock, 1024))
$str .= $sock;
$response = Zend_Http_Response::fromString($str);
Man kann auch die Konstruktormethode verwenden, um ein neues Zend_Http_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 instanziert 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:
-
isSuccessful(): Ob die Anfrage erfolgreich war oder
nicht. Gibt TRUE für HTTP 1xx und
2xx Antwortcodes zurück.
-
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.
-
isRedirect(): Ob die Antwort eine Weiterleitung ist
oder nicht. Gibt TRUE für HTTP 3xx
Antwortcodes zurück.
Example #2 Die Methode isError() verwenden, um eine Antwort zu validieren
if ($response->isError()) {
echo "Error transmitting data.\n"
echo "Server reply was: " . $response-> getStatus() .
" " . $response->getMessage() . "\n";
}
// .. verarbeite die Antwort hier...
Zugriffsmethoden
Der Hauptzweck eines Zend_Http_Response-Objekts ist der einfache Zugriff auf diverse
Antwortparameter.
-
getStatus(): Erhalte den HTTP
Antwortstatuscode (z.B. 200, 504, etc.) zurück.
-
getMessage(): Erhalte die HTTP
Antwortstatus Meldung (z.B. "Not Found", "Authorization Required") zurück.
-
getBody(): Erhalte den kompletten dekodierten
Hauptteil der HTTP-Antwort zurück.
-
getRawBody(): Erhalte den rohen, möglicherweise
kodierten Hauptteil der HTTP-Antwort zurück. Wenn der
Hauptteil z.B. mittels GZIP kodiert wurde, wird er nicht dekodiert.
-
getHeaders(): Erhalte die
HTTP-Antwort-Header als assoziatives Array
(z.B. 'Content-type' => 'text/html') zurück.
-
getHeader($header): Erhalte einen spezifischen
HTTP-Antwort-Header zurück, der durch $header angegeben
wird.
-
getHeadersAsString($status_line, $br):
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ückgegeben. Die Zeilen werden durch den $br
Parameter umgebrochen (kann z.B. "<br />" sein. Standardwert ist
"\n").
-
asString($br): Erhalte die komplette Rückantwort
als String zurück. Die Zeilen werden durch den Parameter $br umgebrochen
(kann z.B. "<br />" sein. Standardwert ist "\n"). Man kann auch die
magische Methode __toString() verwenden, wenn man
das Objekt in einen String casten will. Diese wird dann auf
asString() weiterleiten.
Example #3 Zend_Http_Response Zugriffsmethoden verwenden
if ($response->getStatus() == 200) {
echo "The request returned the following information:<br />";
echo $response-> getBody();
} else {
echo "An error occurred while fetching data:<br />";
echo $response-> getStatus() . ": " . $response-> getMessage();
}
Note: Immer die Rückgabewerte prüfen
Weil eine Antwort mehrere Instanzen desselben Headers beinhalten kann, können
die Methoden getHeader() und getHeaders() 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.
Example #4 Auf Antwort-Header zugreifen
$ctype = $response->getHeader('Content-type');
if (is_array($ctype)) $ctype = $ctype[0];
$body = $response->getBody();
if ($ctype == 'text/html' || $ctype == 'text/xml') {
}
Statische HTTP-Antwortanalysierer
Die Klasse Zend_Http_Response beinhaltet auch verschiedene,
intern verwendete Methoden für die Verarbeitung und Analyse der
HTTP-Rückantworten. Diese Methoden sind alle als statische Methoden
eingerichtet, so dass man sie extern verwenden kann, ohne dass man ein
Zend_Http_Response-Objekt instanzieren muss und nur einen bestimmten Teil der Antwort
extrahieren möchte.
-
Zend_Http_Response::extractCode($response_str):
Extrahiere den HTTP-Antwortcode (z.B. 200 oder 404) von
$response_str und gebe ihn zurück.
-
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.
-
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.
-
Zend_Http_Response::extractHeaders($response_str):
Extrahiere die HTTP-Antwort-Header von
$response_str und gebe sie in einem Array zurück.
-
Zend_Http_Response::extractBody($response_str):
Extrahiere den HTTP-Antworthauptteil aus
$response_str und gebe ihn zurück.
-
Zend_Http_Response::responseCodeAsText($code,
$http11): 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ückgegeben,
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 Dekodierern für
allgemeine HTTP-Antwort-Transferkodierungen:
-
Zend_Http_Response::decodeChunkedBody($body):
Dekodiere einen kompletten "Content-Transfer-Encoding: Chunked" Hauptteil
-
Zend_Http_Response::decodeGzip($body): Dekodiere
einen "Content-Encoding: gzip" Hauptteil
-
Zend_Http_Response::decodeDeflate($body): Dekodiere
einen "Content-Encoding: deflate" Hauptteil
|
|