curlを使用してWebサイトから出力を取得し、HTML出力に対して一連の文字列操作を実行するbashスクリプトを作成しました。問題は、出力をgzip圧縮して返しているサイトに対して実行した場合です。ブラウザでサイトにアクセスしても問題はありません。
curlを手動で実行すると、gzipされた出力が表示されます。
$ 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
返されたデータはgzip圧縮されています。これは期待どおりにhtmlを返すためです。
$ curl "http://example.com" | gunzip
他のサイトではスクリプトがそのまま機能し、gzipを介してパイプするとその機能が損なわれるため、gunzipを介して出力をパイプ処理したくありません。
私が試したこと
- ユーザーエージェントの変更(ブラウザーが送信するのと同じ文字列、「Mozilla / 4.0」などを試しました)
- マンカール
- Google検索
- Stackoverflowの検索
すべてが空になった
何か案は?
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
)を解凍できないことでした-br
から削除することで解決しましたAccept-Encoding
。stackoverflow.com/questions/18983719/…を