bash curl gzip

bash - ¿Cómo manejar adecuadamente una página con gzip al usar curl?



(1)

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.

Cuando ejecuto curl a mano, obtengo salida gzip:

$ curl "http://example.com"

Aquí está el encabezado 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 tienen gzip, porque esto devuelve html, como se esperaba:

$ curl "http://example.com" | gunzip

No quiero canalizar la salida a través de gunzip, porque la secuencia de comandos funciona tal cual en otros sitios, y la conexión a través de gzip rompería esa funcionalidad.

Lo que he intentado

  1. cambiando el user-agent (probé la misma cadena que envía mi navegador, "Mozilla / 4.0", etc.)
  2. hombre rizo
  3. búsqueda de Google
  4. buscando Stackoverflow

Todo salió vacío

¿Algunas ideas?


curl descomprimirá automáticamente la respuesta si establece el indicador --compressed :

curl --compressed "http://example.com"

--comprimido (HTTP) Solicite una respuesta comprimida utilizando uno de los algoritmos que soporta libcurl, y guarde el documento sin comprimir. Si se usa esta opción y el servidor envía una codificación no compatible, Curl informará un error.

Es muy probable que gzip sea compatible, pero puedes verificarlo ejecutando curl -V y buscando libz en algún lugar de la línea "Características":

$ curl -V ... Protocols: ... Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

Tenga en cuenta que es realmente el sitio web en cuestión que tiene la culpa aquí. Si curl no pasó un encabezado de solicitud de Accept-Encoding: gzip , el servidor no debería haber enviado una respuesta comprimida.