2011-10-12 157 views
2

如何將一個解碼服務器響應是解碼HTTP分塊+ gzip壓縮內容

1)傳輸編碼:分塊 2)內容類型:gzip的

我需要手動執行此操作和可以」只需使用curl發送請求。我需要從原始$字符串解碼。

下面是應該unchunk一個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 +傳輸編碼如何組合在一起工作?

感謝

回答

-1

你能否通過驗證,該函數確實是正確的聚集試圖通過它針對一些文本響應分塊的響應啓動。我不精通php,所以我不能確定這個函數是否可以工作,但是由於gzip的響應是二進制的,我想知道是否將它連接到字符串是可以做的。你能解釋爲什麼你需要「從原始的$ string解碼」嗎?爲什麼使用經過驗證可以正確處理所有HTTP細節的客戶端,並且爲它返回的任何內容都不起作用?