Domanda

Qualcuno sa come per decomprimere il contenuto di un file gzip che ho ottenuto con l'arricciatura?

Ad esempio: http://torcache.com/torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent

ha risposto

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

poi il gzip compressi,

ho provato gzdecode ma non funziona, gzeflate così non semplicemente non ottengono alcuna risposta, e il contenuto dei file non più di 2k sono

È stato utile?

Soluzione

gzdecode :

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

d8:announce42:http://tracker.openbittorrent.com/announce13:announce-listll42
...

Altri suggerimenti

Basta dire cURL per decodificare la risposta automaticamente ogni volta che è compresso con gzip

curl_setopt($ch,CURLOPT_ENCODING, '');

Offerte libcurl una caratteristica che lo rende decomprimere automaticamente il contenuto (se costruito con zlib).

Si veda l'opzione CURLOPT_ENCODING: http://curl.haxx.se/libcurl /c/curl_easy_setopt.html#CURLOPTENCODING

Hai provato impostando l'intestazione che indica che si accetta gzip codifica come segue:?

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

Con un zlib flusso Wrapper:

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

Hai provato gzuncompress o gzinflate ?

gzdeflate impacchi , il contrario di ciò che si vuole. Per essere onesti, non riesco a capire come gzdecode differisce da decompressione normale.

C'è anche la possibilità cURL CURLOPT_ENCODING :

  

Il contenuto della "Accept-Encoding:" header. Questo permette la decodifica della risposta. codifiche supportati sono "identità", "sgonfiare", e "gzip". Se una stringa vuota, "", viene impostato, un'intestazione contenente tutti i tipi di codifica supportati viene inviato.

Sembra voler dire che sarà decomprimere automaticamente la risposta, ma non ho ancora testato questo.

Si può farlo con gzinflate (fingendo che $ intestazioni contiene tutto il tuo intestazioni HTTP, e $ buffer contiene i dati):

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;
        }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top