Jak prawidłowo obsługiwać stronę gzipped przy użyciu curl?

Napisałem skrypt bash, który pobiera dane wyjściowe ze strony internetowej za pomocą curl i wykonuje kilka manipulacji ciągiem na wyjściu html. Problem polega na tym, że uruchamiam go na stronie, która zwraca jej wyjście gzipped. Przejście do witryny w przeglądarce działa dobrze.

Kiedy uruchamiam curl ręcznie, dostaję wyjście gzipped:

$ curl "http://example.com"

Oto nagłówek z tej konkretnej strony:

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

Wiem, że zwracane dane są gzipped, ponieważ zwraca html, zgodnie z oczekiwaniami:

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

I nie chcemy przekierowywać wyjścia przez gunzip, ponieważ skrypt działa tak, jak jest na innych stronach, a przekierowanie przez gzip złamie tę funkcjonalność.

What I ' ve tried

    Nie jest to jednak możliwe, ponieważ nie jest to możliwe.]}
  1. Man curl
  2. wyszukiwarka google
  3. wyszukiwanie stackoverflow

Wszystko wyszło puste

Jakieś pomysły?
 104
Author: BryanH, 2011-12-03

1 answers

curl automatycznie dekompresuje odpowiedź, jeśli ustawisz flagę --compressed:

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

--compressed (HTTP) Zażądaj skompresowanej odpowiedzi za pomocą jednego z algorytmów obsługiwanych przez libcurl i zapisz nieskompresowany dokument. Jeśli ta opcja jest używana, a serwer wysyła nieobsługiwane kodowanie, program curl zgłosi błąd.

Gzip jest najprawdopodobniej obsługiwany, ale możesz to sprawdzić uruchamiając curl -V i szukając libz gdzieś w Linia "cechy":

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

Zauważ, że to naprawdę strona, o której mowa, jest tutaj winna. Jeśli curl nie przekazał nagłówka żądania Accept-Encoding: gzip, serwer nie powinien był wysyłać skompresowanej odpowiedzi.

 204
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-03 02:47:57