解码HTTP chunked + gzipped内容

时间:2011-10-12 15:38:37

标签: php http-headers gzip transfer-encoding

如何解码

的服务器响应

1)transfer-encode:chunked 2)content-type:gzip

我需要手动执行此操作,不能只使用curl发送请求。我需要从原始的$ string解码。

这是一个应该解除HTTP响应(php)的函数:

function unchunkHttpResponse($str=null) {
if (!is_string($str) or strlen($str) < 1) { return false; }
$eol = "\r\n";
$add = strlen($eol);
$tmp = $str;
$str = '';
do {
    $tmp = ltrim($tmp);
    $pos = strpos($tmp, $eol);
    if ($pos === false) { return false; }
    $len = hexdec(substr($tmp,0,$pos));
    if (!is_numeric($len) or $len < 0) { return false; }
    $str .= substr($tmp, ($pos + $add), $len);
    $tmp  = substr($tmp, ($len + $pos + $add));
    $check = trim($tmp);
    } while(!empty($check));
unset($tmp);
return $str;
}

但似乎无法使用gzip压缩内容(gzinflate不在此代码段中)。我尝试对返回的内容执行gzinflate,但这根本不起作用。

有什么想法吗?或者gzip + transfer编码块如何协同工作?

由于

1 个答案:

答案 0 :(得分:-1)

您是否可以首先通过尝试针对某些文本响应来验证此函数是否确实正确地聚合了分块响应。我不精通php所以我不能确定这个函数是否可行,但是由于gzipped响应将是二进制的,我想知道是否将它连接到字符串是可以的。你能解释为什么你需要“从原始$字符串解码”?为什么使用一些经过验证可以正确处理所有HTTP详细信息的客户端,以及为它返回的任何内容都不适合你呢?