2

サーバーの応答をどのようにデコードしますか

1) 転送エンコード: チャンク 2) コンテンツ タイプ: 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 + チャンク化された転送エンコーディングはどのように連携しますか?

ありがとう

4

1 に答える 1

-1

この関数が実際にチャンクされた応答を適切に集約することを確認することから始めてください。いくつかのテキスト応答に対して試してみてください。私はphpに詳しくないので、この関数が機能するかどうかはわかりませんが、gzipされた応答はバイナリになるため、文字列に連結しても問題ないのでしょうか. また、「生の $string からデコードする」必要がある理由を説明していただけますか? すべての HTTP の詳細を適切に処理することが証明されているクライアントを使用し、それが返すものを膨らませることがうまくいかないのはなぜですか?

于 2011-10-13T23:02:55.063 に答える