Ho scritto uno script bash che viene emesso da un sito Web utilizzando curl e crea un manipolo di manipolazione delle stringhe sull'output html. Il problema è quando lo eseguo contro un sito che sta restituendo il suo output gzippato. Andare al sito in un browser funziona bene.Come gestire correttamente una pagina con gzip quando si utilizza l'arricciatura?
Quando eseguo ricciolo mano, ottengo uscita compresso con gzip:
$ curl "http://example.com"
Ecco il colpo di testa di quel particolare sito:
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
So che i dati restituiti è compresso con gzip, perché questo ritorna html , come previsto:
$ curl "http://example.com" | gunzip
non voglio inviare l'output attraverso gunzip, perché il lavoro di script s as-is su altri siti, e il piping attraverso gzip interromperà tale funzionalità.
Quello che ho provato
- cambiando l'user-agent (ho provato la stessa stringa il mio browser invia, "Mozilla/4.0", ecc)
- uomo arricciare
- google search
- ricerca StackOverflow
Tutto è venuto a mani vuote
012.351.641,061 milaQualche idea?
Bello! Funziona come un campione. Grazie. – BryanH
+1 finalmente una ricerca di 4 ore è terminata con --compressa. grazie! – Eugene
Questo sembra essere un bug di curl, perché dovrebbe attivare la sua decodifica in base alla risposta, non su quello che ha richiesto (dato che supporta gzip). Per citare HTTP 1.1: "Se non è presente alcun campo Accept-Encoding in una richiesta, il server PU assume presumere che il client accetterà qualsiasi codifica del contenuto." Ma continua dicendo che i server DOVREBBE in quel caso non codificare il contenuto, hmm, vai a capire. –