Comment faire pour gérer correctement un format de page lors de l'utilisation de curl?
J'ai écrit un script bash qui obtient de sortie à partir d'un site web à l'aide de curl et fait un tas de manipulation de chaîne sur la sortie html. Le problème est que quand je le lance contre un site qui est de retour de sa sortie au format gzip. Va sur le site dans un navigateur fonctionne très bien.
Quand je lance le roulage à la main, je reçois format de sortie:
$ curl "http://example.com"
Voici l'en-tête à partir de ce site en particulier:
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
Je sais que les données retournées sont au format gzip, parce que cela renvoie html, comme prévu:
$ curl "http://example.com" | gunzip
Je ne veux pas le tuyau de la sortie à travers gunzip, parce que le script fonctionne comme sur d'autres sites, et de la tuyauterie par gzip serait briser cette fonctionnalité.
Ce que j'ai essayé de
- de changer le user-agent (j'ai essayé la même chaîne de mon navigateur envoie, "Mozilla/4.0", etc)
- homme curl
- recherche google
- recherche stackoverflow
Tout est venu vide
Des idées?
- Pour moi, le problème était que cURL n'était pas en mesure de décompresser Brotli (
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
) - résolu en supprimantbr
deAccept-Encoding
. voir stackoverflow.com/questions/18983719/...
Vous devez vous connecter pour publier un commentaire.
curl
automatiquement décompresser la réponse, si vous définissez la--compressed
drapeau:gzip est probablement pris en charge, mais vous pouvez le vérifier en exécutant
curl -V
et à la recherche d' libz quelque part dans les "Fonctions" de la ligne:Noter que c'est vraiment le site en question qui est en cause ici. Si
curl
ne passe pas uneAccept-Encoding: gzip
- tête de la requête, le serveur ne devrait pas avoir envoyé une réponse compressée.Accept-Encoding: deflate, gzip
n'est pas assez, même si le serveur renvoie un gzip réponse avecContent-Encoding: gzip
, curl ne sont pas automatiquement ungzip il. Le--compressed
drapeau est nécessaire.