HTTP_Request2_Response
Вернуться к: HTTP_Request2
HTTP_Request2_Response
HTTP_Request2_Response encapsulates a HTTP response message and provides easy access to different parts of it. It also contains static helper methods HTTP_Request2_Response::decodeGzip() and HTTP_Request2_Response::decodeDeflate() for decoding response bodies encoded by Content-Encoding: gzip (as defined in RFC 1952) and Content-Encoding: deflate (RFC 1950), respectively.
An instance of this class will usually be returned by HTTP_Request2::send() method. You can also build an instance yourself using either helper methods of HTTP_Request2_Adapter_Mock or manually (see below).
You can use the following methods for accessing various parts of HTTP response: getStatus(), getReasonPhrase(), getVersion(), getHeader(), getCookies(), getBody(). Note that the response object will not contain the response body if 'store_body' configuration parameter was set to FALSE. Also note that getBody() always returns body completely decoded, if for some reason you want to access body still encoded by gzip / deflate you'll need to use Observers and Socket adapter.
Accessing response parts
<?php
$request = new HTTP_Request2('http://www.example.com/');
$response = $request->send();
echo "Response status: " . $response->getStatus() . "\n";
echo "Human-readable reason phrase: " . $response->getReasonPhrase() . "\n";
echo "Response HTTP version: " . $response->getVersion() . "\n";
echo "Response headers:\n";
foreach ($response->getHeader() as $k => $v) {
echo "\t{$k}: {$v}\n";
}
echo "Value of a specific header (Content-Type): " . $response->getHeader('content-type') . "\n";
echo "Cookies set in response:\n";
foreach ($response->getCookies() as $c) {
echo "\tname: {$c['name']}, value: {$c['value']}" .
(empty($c['expires'])? '': ", expires: {$c['expires']}") .
(empty($c['domain'])? '': ", domain: {$c['domain']}") .
(empty($c['path'])? '': ", path: {$c['path']}") .
", secure: " . ($c['secure']? 'yes': 'no') . "\n";
}
echo "Response body:\n" . $response->getBody();
?>
Building the Response Manually
The class is designed to be used in "streaming" scenario, building the response as it is being received:
Building the response (pseudocode)
<?php
$statusLine = read_status_line();
$response = new HTTP_Request2_Response($statusLine);
do {
$headerLine = read_header_line();
$response->parseHeaderLine($headerLine);
} while ($headerLine != '');
while ($chunk = read_body()) {
$response->appendBody($chunk);
}
?>
Everything is straightforward enough, but a few things need considering:
Constructor will throw an exception if the provided string does not look like a valid response status line.
It is necessary to pass an empty string to parseHeaderLine() to indicate the end of response headers: this triggers some additional processing (e.g. cookie parsing).
Вернуться к: HTTP_Request2