Zend_Http_Response的getRawBody()和getBody()方法之间的区别?

时间:2011-02-26 06:45:11

标签: php http zend-framework response

嗨,我们知道$ 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 个答案:

答案 0 :(得分:9)

getRawBody()按原样返回http响应的正文。

getBody()调整某些标头,即解压缩使用gzip或deflate内容编码标头发送的内容。或者是分块的传输编码头。

最简单的方法是将这些问题简单地看一下代码。也是一个很棒的学习经历。编译代码是为了简洁起见。

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;
}

答案 1 :(得分:1)

HTTP主体可以以各种方式编码。 例如,它可以分成不同的块,每个块都以块大小开头,或者gzipped:

http://en.wikipedia.org/wiki/Chunked_transfer_encoding

getBody()将根据其编码类型返回已处理的HTTP正文。 getRawBody将按原样返回HTTP主体。