make - php curl string
Descomprime un archivo gzip de CURL, en php (7)
¿Has intentado configurar el encabezado indicando que aceptas la codificación gzip de la siguiente manera ?:
curl_setopt($rCurl, CURLOPT_HTTPHEADER, array(''Accept-Encoding: gzip,deflate''));
¿Alguien sabe cómo descomprimir los contenidos de un archivo gzip que obtuve con Curl?
por ejemplo: http://torcache.com/torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent
respondido
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
luego, el gzip comprimido
probé gzdecode pero no funciona, gleeflate también no simplemente no recibe ninguna respuesta, y el contenido de los archivos no son más que 2k
¿Has probado gzuncompress
o gzinflate
?
gzdeflate
comprime , lo contrario de lo que quieres. Para ser sincero, no puedo entender cómo gzdecode
difiere de la descompresión normal.
También está la opción cURL CURLOPT_ENCODING
:
El contenido del encabezado "Accept-Encoding:". Esto permite la decodificación de la respuesta. Las codificaciones compatibles son "identidad", "desinflar" y "gzip". Si se establece una cadena vacía, "", se envía un encabezado que contiene todos los tipos de codificación admitidos.
Parece que significa que descomprimirá automáticamente la respuesta, pero no lo he probado.
Con un contenedor zlib Stream:
file_get_contents("compress.zlib://http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
Puedes hacerlo con gzinflate (simulando que $ headers contiene todos tus encabezados HTTP, y $ buffer contiene tus datos):
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;
}
}
Solo dile a cURL que decodifique la respuesta automáticamente cada vez que se gzipee
curl_setopt($ch,CURLOPT_ENCODING, '''');
Use gzdecode
:
<?php
$c = file_get_contents("http://torcache.com/" .
"torrent/63ABC1435AA5CD48DCD866C6F7D5E80766034391.torrent");
echo gzdecode($c);
da
d8:announce42:http://tracker.openbittorrent.com/announce13:announce-listll42 ...
libcurl ofrece una característica que lo hace descomprimir los contenidos automáticamente (si está construido con zlib).
Consulte la opción CURLOPT_ENCODING: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTENCODING