Разница между методами getRawBody() и getBody() Http-ответа Zend?
Привет, удивительно, в чем разница между $response->getBody() и $response->getrawbody();
$this->_client->setUri('http://www.google.com/ig?hl=en');
try {
$response = $this->_client->request();
}catch(Zend_Http_Exception $e)
{
echo 'Zend http Client Failed';
}
echo get_class($response);
if($response->isSuccessful())
{
$response->getBody();
$response->getRawBody();
}
2 answers
getRawBody()
возвращает тело http-ответа как есть.
getBody()
отрегулируйте для определенных заголовков, т. е. распакуйте содержимое, отправленное с помощью gzip, или выкачайте заголовки, кодирующие содержимое. Или фрагментированный заголовок кодирования передачи.
Самый простой способ разобраться в этих вопросах - просто взглянуть на код. Также отличный опыт обучения. Код отредактирован для краткости.
public function getRawBody()
{
return $this->body;
}
public function getBody()
{
$body = '';
// Decode the body if it was transfer-encoded
switch (strtolower($this->getHeader('transfer-encoding'))) {
case 'chunked':
// Handle chunked body
break;
// No transfer encoding, or unknown encoding extension:
default:
// return body as is
break;
}
// Decode any content-encoding (gzip or deflate) if needed
switch (strtolower($this->getHeader('content-encoding'))) {
case 'gzip':
// Handle gzip encoding
break;
case 'deflate':
// Handle deflate encoding
break;
default:
break;
}
return $body;
}
Тело HTTP может быть закодировано различными способами. Например, он может быть разделен на разные куски, каждому из которых предшествует размер куска, или сжат:
Http://en.wikipedia.org/wiki/Chunked_transfer_encoding
GetBody() вернет обработанное тело HTTP в соответствии с его типом кодировки. getRawBody вернет тело HTTP как есть.