これらのwgetおよびcURLコマンドはコマンドラインでは機能しますが、Bashスクリプトでは機能しません。

これらのwgetおよびcURLコマンドはコマンドラインでは機能しますが、Bashスクリプトでは機能しません。

ウェブサイトから画像をダウンロードしようとしており、次のことを試しました:

curl -o img.jpg (URL)
wget (URL) -O img.jpg
wget --save-headers -U "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.17  (KHTML,   Gecko) Ubuntu/11.04 Chromium/11.0.654.0 Chrome/11.0.654.0  Safari/534.17" (URL) -O img.jpg

いずれの場合も、ターミナルで通常どおりに実行するとコマンドは機能します。ただし、これを何らかの bash スクリプトに組み込もうとすると、イメージが破損し、次のメッセージが表示されます。

Error interpreting JPEG image file (Not a JPEG file: starts with 0x48 0x54).

スクリプト:

#!/bin/bash
#I pass the url as a parameter - http://img1.goodfon.su/wallpaper/original/f/c3/les-eli-lokomotiv-noch-sneg.jpg

#wget --save-headers -k -U "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.17  (KHTML,   Gecko) Ubuntu/11.04 Chromium/11.0.654.0 Chrome/11.0.654.0  Safari/534.17" $1 -O img.jpg
#curl -o img.jpg $1
wget $1 -O img.jpg

avconv -framerate 25 -f image2 -i img.jpg -c:v h264 -crf 1 out.mov

答え1

2つの16進数は

Not a JPEG file: starts with 0x48 0x54

ASCIIに変換されますHTが、これはおそらく に続くでしょうHTTP[...]。 でファイルのヘッダーを確認してくださいxxd -l 20 img.jpg。これは、最後に投稿したコマンドから予想される出力です。

wget --save-headers

wget出力の先頭にHTTP回答のヘッダーを追加するように指示します。

他の 2 つの呼び出しでは、これは実行されません。


スクリプトをテストしたところ、またはで動作しますcurlwgetファイルwgetをダウンロードするには、ユーザー文字列-Uが必要です。そうでない場合はサーバーが拒否します。

curl -o img.jpg $1

または

wget -U "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.17  (KHTML,   Gecko) Ubuntu/11.04 Chromium/11.0.654.0 Chrome/11.0.654.0  Safari/534.17" $1 -O img.jpg

それなし --save-headers

関連情報