これはファイルをダウンロードする私のカールコマンドです。ダウンロードしたファイルが破損して開けません。ファイルURLは次のとおりです。https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg
curl -iv --output abc.jpg --request GET \
--url https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg
Chromeでカールの完全なコピーを試しましたが、うまくいきませんでした。
curl 'https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg' --output "abc.jpg" \
-H 'authority: www.carscoops.com' \
-H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'cache-control: no-cache' \
-H 'pragma: no-cache' \
-H 'sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "macOS"' \
-H 'sec-fetch-dest: document' \
-H 'sec-fetch-mode: navigate' \
-H 'sec-fetch-site: none' \
-H 'sec-fetch-user: ?1' \
-H 'upgrade-insecure-requests: 1' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
また、機能しませんが、wget
ブラウザからアクセスできます。どのような技術でダウンロードを防ぐことができますか?
答え1
イメージはBrotliでエンコードされていますが(レスポンスヘッダContent-Encoding: br
を参照)、カールバージョンがbrotliをサポートしていない可能性が高いため、デコードは自動的に無視されます。このオプションを追加すると、カールバージョンが返されたエンコーディングをサポートしていることを確認できます--compressed
。 Curlは、コンテンツのエンコーディングを理解していないと失敗します。はい(Debian Busterでテスト済み):
$ curl --compressed "https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg" > abc.jpg
curl: (61) Unrecognized content encoding type. libcurl understands deflate, gzip content encodings.
カールバージョンをアップグレードしてみてください。最新バージョンではbrをサポートする必要があります。
またはブロットリー出力をパイピングして「圧縮解除」できるコマンドラインツール(確かにすでに圧縮されているJPEG画像の場合、エンコードは簡単なので、実際に画像を「圧縮解除」するために数バイトだけ削除するだけですが、ほとんどは作業に適したツールです。 .):
$ curl "https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg" \
| brotli -d > abc.jpg