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以下です。
gzdecode
を使用:
<?php
$c = file_get_contents("http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
echo gzdecode($c);
与える
d8:announce42:http://tracker.openbittorrent.com/announce13:announce-listll42 ...
CURLにgzipされたときに常に応答を自動的にデコードするように指示するだけです
curl_setopt($ch,CURLOPT_ENCODING, '');
libcurlは、コンテンツを自動的に解凍する機能を提供します(zlibでビルドされている場合)。
CURLOPT_ENCODINGオプションを参照してください: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTENCODING
次のようにgzipエンコーディングを受け入れることを示すヘッダーを設定してみましたか?:
curl_setopt($rCurl, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));
file_get_contents("compress.zlib://http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
gzuncompress
または gzinflate
を試しましたか?
gzdeflate
compresses、必要なものの逆です。正直なところ、gzdecode
が通常の圧縮解除とどのように異なるかわかりません。
CURLオプション CURLOPT_ENCODING
:
"Accept-Encoding:"ヘッダーの内容。 これにより、応答のデコードが有効になります。サポートされるエンコーディングは、「identity」、「deflate」、および「gzip」です。空の文字列 ""が設定されている場合、サポートされているすべてのエンコードタイプを含むヘッダーが送信されます。
応答を自動的に解凍することを意味しているようですが、テストしていません。
これは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;
}
}