Ich habe ein Bash-Skript geschrieben, das mithilfe von Curl von einer Website ausgegeben wird und eine Reihe von Zeichenfolgenmanipulationen an der HTML-Ausgabe vornimmt. Das Problem ist, wenn ich es für eine Site ausführe, die ihre Ausgabe gzipped zurückgibt. Das Aufrufen der Site in einem Browser funktioniert einwandfrei.
Wenn ich Curl von Hand laufen lasse, erhalte ich eine gezippte Ausgabe:
$ curl "http://example.com"
Hier ist der Header von dieser bestimmten Site:
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
Ich weiß, dass die zurückgegebenen Daten komprimiert sind, da dies erwartungsgemäß HTML zurückgibt:
$ curl "http://example.com" | gunzip
Ich möchte die Ausgabe nicht über gunzip leiten, da das Skript auf anderen Websites unverändert funktioniert und das Weiterleiten durch gzip diese Funktionalität beeinträchtigen würde.
Was ich versucht habe
- Ändern des Benutzeragenten (Ich habe versucht, dieselbe Zeichenfolge zu verwenden, die mein Browser sendet, "Mozilla / 4.0" usw.)
- Mann locken
- Google-Suche
- Suche nach Stackoverflow
Alles war leer
Irgendwelche Ideen?
curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0
) nicht dekomprimieren konnte - es wurde durch Entfernenbr
von gelöstAccept-Encoding
. siehe stackoverflow.com/questions/18983719/…Antworten:
curl
dekomprimiert die Antwort automatisch, wenn Sie das--compressed
Flag setzen:gzip wird höchstwahrscheinlich unterstützt, aber Sie können dies überprüfen, indem Sie libz irgendwo in der Zeile "Features" ausführen
curl -V
und suchen :Beachten Sie, dass hier wirklich die betreffende Website schuld ist. Wenn
curl
keinAccept-Encoding: gzip
Anforderungsheader übergeben wurde, sollte der Server keine komprimierte Antwort gesendet haben.quelle
Accept-Encoding: deflate, gzip
nicht aus - selbst wenn der Server eine gzip-Antwort mit zurückgibtContent-Encoding: gzip
, wird Curl diese nicht automatisch entpacken. Die--compressed
Flagge ist erforderlich.