33

curl で取得した gzip ファイルの内容を解凍する方法を知っている人はいますか?

例: http://torcache.com/torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent

応答した

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 09 Jun 2010 01:11:26 GMT
Content-Type: application/x-bittorrent
Content-Length: 52712
Last-Modified: Tue, 08 Jun 2010 15:09:58 GMT
Connection: keep-alive
Expires: Fri, 09 Jul 2010 01:11:26 GMT
Cache-Control: max-age=2592000
Content-Encoding: gzip
Accept-Ranges: bytes

次に、圧縮されたgzip、

私はgzdecodeを試しましたが、うまくいきません.gzeflateも単に応答がありません.ファイルの内容は2k以下です.

4

7 に答える 7

82

gzipされたときはいつでも応答を自動的にデコードするようにcURLに指示するだけです

curl_setopt($ch,CURLOPT_ENCODING, '');
于 2010-07-18T20:55:28.017 に答える
15

使用gzdecode:

<?php
    $c = file_get_contents("http://torcache.com/" .
        "torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
    echo gzdecode($c);

与える

d8:announce42:http://tracker.openbittorrent.com/announce13:announce-listll42
...
于 2010-06-09T02:05:39.893 に答える
13

libcurl は、内容を自動的に解凍する機能を提供します (zlib でビルドされている場合)。

CURLOPT_ACCEPT_ENCODING オプションを参照してください: https://curl.haxx.se/libcurl/c/CURLOPT_ACCEPT_ENCODING.html

于 2010-06-15T22:19:10.813 に答える
1

zlib Stream Wrapperを使用する場合:

file_get_contents("compress.zlib://http://torcache.com/" .
    "torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
于 2011-07-22T21:03:48.780 に答える
1

次のように、gzip エンコーディングを受け入れることを示すヘッダーを設定してみましたか?:

curl_setopt($rCurl, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));
于 2010-06-09T01:56:48.803 に答える
0

または試しましたgzuncompressgzinflate

gzdeflate 、あなたが望むものの反対です。正直なところ、gzdecode通常の解凍とどう違うのかわかりません。

cURL オプションもありますCURLOPT_ENCODING:

「Accept-Encoding:」ヘッダーの内容。これにより、応答のデコードが可能になります。サポートされているエンコードは、「identity」、「deflate」、および「gzip」です。空の文字列 "" が設定されている場合、サポートされているすべてのエンコーディング タイプを含むヘッダーが送信されます。

応答を自動的に解凍することを意味しているようですが、私はそれをテストしていません。

于 2010-06-09T02:00:56.440 に答える
0

gzinflate でそれを行うことができます ($headers にはすべての HTTP ヘッダーが含まれ、$buffer にはデータが含まれているふりをします)。

if (isset($headers['Content-Encoding']) && ($headers['Content-Encoding'] === 'gzip' || $headers['Content-Encoding'] === 'deflate'))
    {
        if ($headers['Content-Encoding'] === 'gzip')
        {
            $buffer = substr($buffer, 10);
        }
        $contents = @gzinflate($buffer);
        if ($contents === false)
        {
            return false;
        }
    }
于 2011-08-30T12:35:43.020 に答える