컬을 사용할 때 지퍼가 달린 페이지를 적절하게 처리하는 방법
웹 사이트에서 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이 반환되기 때문에 gzipped임을 알고 있습니다.
$ curl "http://example.com" | gunzip
gunzip을 통한 출력 파이프 접속은 원치 않습니다.다른 사이트에서는 스크립트가 그대로 동작하고 gzip을 통한 파이핑은 해당 기능을 손상시킬 수 있기 때문입니다.
내가 시도한 것
- user-agent 변경(브라우저에서 보내는 문자열과 동일한 문자열 "Mozilla/4.0" 등)
- 맨컬
- 구글 검색
- 검색, stackoverflow
모든 것이 빈털터리가 되었다.
좋은 생각 있어요?
curl
를 설정하면 응답이 자동으로 압축 해제됩니다.--compressed
플래그:
curl --compressed "http://example.com"
--compressed (HTTP) libcurl이 지원하는 알고리즘 중 하나를 사용하여 압축된 응답을 요청하고 압축되지 않은 문서를 저장합니다.이 옵션을 사용하여 서버가 지원되지 않는 인코딩을 전송하면 컬이 오류를 보고합니다.
대부분의 경우 gzip이 지원되지만 실행함으로써 이를 확인할 수 있습니다.curl -V
"Features" 행에서 libz를 찾습니다.
$ curl -V
...
Protocols: ...
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
여기서 문제가 있는 것은 문제의 웹 사이트입니다.한다면curl
1도 통과하지 못했다Accept-Encoding: gzip
서버가 압축 응답을 전송하지 않아야 합니다.
관련 버그 리포트 Raw compressed output when not compressed but server returns gzip data #2836에서 개발자는 다음과 같이 말합니다.
서버는 클라이언트가 허용 가능한 신호를 보내지 않은 상태에서 content-encoding: gzip을 전송해서는 안 됩니다.
또한 --compressed with curl을 사용하지 않을 때는 명령줄 도구에 정확한 스트림을 저장하도록 지시합니다(압축 여부에 관계없이).여기 컬 벌레는 안 보이는데...
따라서 서버가 gzipped 콘텐츠를 전송할 수 있는 경우--compressed
컬이 자동으로 압축 해제되도록 합니다.
언급URL : https://stackoverflow.com/questions/8364640/how-to-properly-handle-a-gzipped-page-when-using-curl
'prosource' 카테고리의 다른 글
Safari에서 열린 UI Web View 링크 (0) | 2023.04.18 |
---|---|
XAML에서 열거형을 사용하려면 어떻게 해야 합니까? (0) | 2023.04.18 |
'시스템에 가치를 부여합니다.창문들.Baml2006년TypeConverterMarkupExtension'이 예외를 발생시켰습니다.' (0) | 2023.04.18 |
경고: 끊어진 참조/리모트/원점/헤드 무시 (0) | 2023.04.18 |
cron 작업이 아직 실행되지 않은 경우에만 실행 (0) | 2023.04.18 |