[bash] curl을 사용할 때 gzipped 페이지를 올바르게 처리하는 방법은 무엇입니까?

curl을 사용하여 웹 사이트에서 출력을 얻고 html 출력에서 ​​많은 문자열 조작을 수행하는 bash 스크립트를 작성했습니다. 문제는 출력 결과를 반환하는 사이트에 대해 실행할 때입니다. 브라우저에서 사이트로 이동하면 제대로 작동합니다.

손으로 컬을 실행하면 gzipped 출력이 나타납니다.

$ curl "http://example.com"

특정 사이트의 헤더는 다음과 같습니다.

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

예상대로 HTML이 반환되므로 반환 된 데이터가 압축 된 것을 알고 있습니다.

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

스크립트는 다른 사이트에서 그대로 작동하고 gzip을 통한 파이프 연결은 해당 기능을 중단하기 때문에 gunzip을 통해 출력을 파이프하고 싶지 않습니다.

내가 시도한 것

  1. 사용자 에이전트 변경 (브라우저가 보내는 동일한 문자열, “Mozilla / 4.0″등을 시도했습니다)
  2. 남자 컬
  3. 구글 검색
  4. stackoverflow 검색

모든 것이 비워졌습니다

어떤 아이디어?



답변

curl--compressed플래그 를 설정하면 응답이 자동으로 압축 해제됩니다 .

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

–compressed
(HTTP) libcurl이 지원하는 알고리즘 중 하나를 사용하여 압축 된 응답을 요청하고 압축되지 않은 문서를 저장하십시오. 이 옵션을 사용하고 서버에서 지원되지 않는 인코딩을 보내면 curl에서 오류를보고합니다.

gzip이 지원 될 가능성이 가장 높지만 “Features”행에서 libz 를 실행 curl -V하고 찾아서 이를 확인할 수 있습니다 .

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

이 사이트는 실제로 문제가있는 웹 사이트입니다. 요청 헤더를 curl전달하지 않은 경우 Accept-Encoding: gzip서버는 압축 된 응답을 보내지 않아야합니다.


답변