Dekomprimieren eine gzip-Datei von CURL, auf PHP
Frage
Wer weiß, wie die Inhalte einer gzip Datei zu dekomprimieren, dass ich mit curl bekam?
zum Beispiel: http://torcache.com/torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent
reagiert
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
dann das komprimierte gzip,
habe ich versucht gzdecode aber nicht funktioniert, gzeflate auch nicht, dass sie einfach nicht bekommen keine Antwort, und der Inhalt der Dateien nicht mehr als 2k
Lösung
Verwenden Sie gzdecode
:
<?php
$c = file_get_contents("http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
echo gzdecode($c);
gibt
d8:announce42:http://tracker.openbittorrent.com/announce13:announce-listll42 ...
Andere Tipps
Just cURL sagen, die Antwort automatisch zu entschlüsseln, wann immer es ist gzipped
curl_setopt($ch,CURLOPT_ENCODING, '');
Libcurl bietet eine Funktion, die es dekomprimiert den Inhalt automatisch macht (wenn mit zlib gebaut).
Sehen Sie die CURLOPT_ENCODING Option: http://curl.haxx.se/libcurl /c/curl_easy_setopt.html#CURLOPTENCODING
Haben Sie versucht, den Header Einstellung besagt, dass Sie codieren, akzeptieren gzip wie folgt:
curl_setopt($rCurl, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));
Mit einem zlib Stream-Wrapper:
file_get_contents("compress.zlib://http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
Haben Sie versucht, gzuncompress
oder gzinflate
?
gzdeflate
Kompressen , das Gegenteil von dem, was Sie wollen. Um ehrlich zu sein, ich kann nicht herausfinden, wie gzdecode
unterscheidet sich von normalen Dekomprimieren.
Es gibt auch die Option cURL CURLOPT_ENCODING
:
Der Inhalt des "Accept-Encoding:" Header. Dies ermöglicht Dekodierung der Antwort. Unterstützte Kodierungen sind "Identität", "deflate" und "gzip". Wenn ein leerer String, „“, gesetzt wird, ein Header alle unterstützten Codierungstypen enthält, wird gesendet.
Es scheint, es zu verstehen, wird automatisch die Antwort dekomprimieren, aber ich habe nicht getestet, dass.
Sie können es mit gzinflate (vorgeben, dass $ Header enthält alle HTTP-Header, und $ Puffer enthält Daten):
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;
}
}