Вопрос

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

затем сжатый ГЦИП,

Я попробовал gzdecode, но не работает, gzeflate также разве они просто не получают никакого ответа, а содержимое файлов не более 2k

Это было полезно?

Решение

Использовать gzdecode:

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

дает

D8: Announce42: http: //tracker.openbittorrent.com/annount13: annoving-listll42 ...

Другие советы

Просто скажи скручиваемость, чтобы автоматически декодировать ответ, всякий раз, когда он сочетается

curl_setopt($ch,CURLOPT_ENCODING, '');

LibCURL предлагает функцию, которая делает ее автоматически распаковывать содержимое (если они строятся с zlib).

Смотрите опцию curlopt_encoding: http://curl.hax.se/libcurl/c/curl_easy_setopt.html#curloptencoding.

Вы пытались установить заголовок, заявив, что вы принимаете GZIP кодировку следующим образом?:

curl_setopt($rCurl, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));

С А. Zlib Steam Wrapper:

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

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

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

Есть также опция скручивания CURLOPT_ENCODING:

Содержимое «Применяемое кодирование:» заголовок. Это позволяет декодировать ответ. Поддерживаемые кодировки - «идентичность», «Deflate» и «GZIP». Если отправляется пустая строка, «», задается заголовок, содержащий все поддерживаемые типы кодирования.

Похоже, это автоматически распадет ответ, но я не проверил это.

Вы можете сделать это с gzinflate (притворяться, что $ заголовки содержат все ваши заголовки 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;
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top