Escribí un script bash que obtiene un resultado de un sitio web usando curl y hace un montón de manipulación de cadenas en el resultado html. El problema es cuando lo ejecuto contra un sitio que devuelve su salida comprimida gzip. Ir al sitio en un navegador funciona bien.¿Cómo manejar adecuadamente una página con gzip al usar curl?
Cuando corro rizo con la mano, me sale de salida gzipped:
$ curl "http://example.com"
Aquí está la cabecera de ese sitio en particular:
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8
X-Powered-By: PHP/5.2.17
Last-Modified: Sat, 03 Dec 2011 00:07:57 GMT
ETag: "6c38e1154f32dbd9ba211db8ad189b27"
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: must-revalidate
Content-Encoding: gzip
Content-Length: 7796
Date: Sat, 03 Dec 2011 00:46:22 GMT
X-Varnish: 1509870407 1509810501
Age: 504
Via: 1.1 varnish
Connection: keep-alive
X-Cache-Svr: p2137050.pubip.peer1.net
X-Cache: HIT
X-Cache-Hits: 425
Sé que los datos devueltos se gzipped, porque esto devuelve html , como se esperaba:
$ curl "http://example.com" | gunzip
No quiero conectar la salida a través de gunzip, porque el script funciona s como está en otros sitios, y la canalización a través de gzip rompería esa funcionalidad.
Lo que he tratado
- cambiar el agente de usuario (probé la misma cadena de mi navegador envía, "Mozilla/4.0", etc.)
- hombre rizar
- google search
- buscar stackoverflow
Todo encontró nada
¿Alguna idea?
¡Hermoso! Funciona como un campeón. Gracias. – BryanH
+1 finalmente una búsqueda de 4 horas ha terminado con --comprimido. ¡Gracias! – Eugene
Esto parece ser un error de curvatura, porque debe desencadenar su decodificación en función de la respuesta, no de lo que solicitó (dado que admite gzip). Para citar HTTP 1.1: "Si no hay un campo de aceptación de codificación en una solicitud, el servidor PUEDE suponer que el cliente aceptará cualquier codificación de contenido". Pero continúa diciendo que los servidores DEBERÍAN en ese caso no codificar el contenido, hmm, imagínate. –