Подтвердить что ты не робот

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

Кто-нибудь знает, как распаковать содержимое gzip файла, который я получил с curl?

например: 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

4b9b3361

Ответ 1

Используйте 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

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

curl_setopt($ch,CURLOPT_ENCODING, '');

Ответ 3

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

См. параметр CURLOPT_ENCODING: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTENCODING

Ответ 4

Пробовали ли вы настроить заголовок, утверждающий, что вы принимаете кодировку gzip следующим образом:

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

Ответ 5

С zlib Stream Wrapper:

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

Ответ 6

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

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

Здесь также опция cURL CURLOPT_ENCODING:

Содержимое заголовка "Accept-Encoding:". Это позволяет декодировать ответ. Поддерживаемые кодировки - это "личность", "дефляция" и "gzip". Если задана пустая строка "", загорается заголовок, содержащий все поддерживаемые типы кодирования.

Кажется, он автоматически распакует ответ, но я его не тестировал.

Ответ 7

Вы можете сделать это с помощью 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;
        }
    }