有谁知道如何解压缩我用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
答案 0 :(得分:74)
告诉cURL在解压缩时自动解码响应
curl_setopt($ch,CURLOPT_ENCODING, '');
答案 1 :(得分:12)
使用gzdecode
:
<?php
$c = file_get_contents("http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
echo gzdecode($c);
给出
d8:announce42:http://tracker.openbittorrent.com/announce13:announce-listll42 ...
答案 2 :(得分:11)
libcurl提供了一种功能,可以自动解压缩内容(如果使用zlib构建)。
请参阅CURLOPT_ENCODING选项:http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTENCODING
答案 3 :(得分:1)
您是否尝试过设置标题,说明您接受gzip编码如下?:
curl_setopt($rCurl, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));
答案 4 :(得分:1)
file_get_contents("compress.zlib://http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
答案 5 :(得分:0)
您是否尝试过gzuncompress
或gzinflate
?
gzdeflate
压缩,与您想要的相反。说实话,我无法弄清楚gzdecode
与正常解压缩的区别。
还有cURL选项CURLOPT_ENCODING
:
“Accept-Encoding:”标题的内容。 这样可以解码响应。支持的编码是“identity”,“deflate”和“gzip”。如果设置了空字符串“”,则发送包含所有支持的编码类型的标头。
这似乎意味着它会自动解压缩响应,但我没有测试过。
答案 6 :(得分: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;
}
}