Раскройте файл gzip из CURL, на php

Кто-нибудь знает, как распаковать содержимое 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: объявить-listll42
 ...

Просто скажите cURL, чтобы автоматически декодировать ответ, когда он был gzipped

 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')); 

С помощью zlib Stream Wrapper:

 file_get_contents("compress.zlib://http://torcache.com/" . "torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent"); 

Вы пробовали gzuncompress или gzinflate ?

gzdeflate compresses , противоположное тому, что вы хотите. Честно говоря, я не могу понять, как gzdecode отличается от обычного разжатия.

Также существует опция cURL CURLOPT_ENCODING :

Содержимое заголовка «Accept-Encoding:». Это позволяет декодировать ответ. Поддерживаемые кодировки – это «личность», «дефляция» и «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; } }