0

リモートWebサイトからファイルをダウンロードするためのbashスクリプトをコーディングしていますが、リモートWebサイトでは最初にPOSTフォームを送信してからファイルを返す必要があります。その解決策を見つけることができ、うまく機能しています。

curl -F 'data=filename.rar' --user-agent 'Mozilla/4.0 POST' http://somewebsite.com/index.html -v > filename

ここで問題となるのは、サーバーがそのファイルを返すときにSTDOUTをリダイレクトする必要があることです。そうしないと、画面にぎこちないコードが表示されます。ハードコードされた「filename」の代わりに、ファイルの実際の名前を取得して、そこでSTDOUTをリダイレクトします。ヘッダーを取得してからファイル名を解析するために-sIオプションを指定してcurlを実行することは、ここでの解決策ではありません。これは、curlが-Iオプションと-Fオプションの組み合わせを受け入れないためです。ヘッダーを参照すると、サーバーもそれらと一緒にファイルを送信します。ヘッダーのみを取得する方法はありますか(ファイルを取得するために投稿データも送信する必要があることを忘れないでください)、ヘッダーを解析してファイル名を抽出できますか?次に、新しいcurlリクエストを作成しますが、そのファイル名をSTDOUT値として使用します。または、curlを作成して、ヘッダーからファイル名に自動的にダウンロードする方法はありますか?

4

3 に答える 3

0

最後に...解決策は、元のファイル名を保持するために Wget で --content-disposition オプションを使用することです。

于 2012-08-08T22:47:51.713 に答える
0

curl で -o オプションを試してみてください。例えば:

curl -F 'data=filename.rar' --user-agent 'Mozilla/4.0 POST' -o outputFileName http://somewebsite.com/index.html -v
于 2012-08-08T18:19:23.163 に答える
0

以前の回答へのコメントに従って、代わりに wget を試してください。

FILENAME=`wget --post-file=filename.rar -P dir_to_save_files http://somewebsite.com/index.html | grep "filename" | cut -d"=" -f2 | awk '{print$1}'`; wget --post-file=filename.rar -O $FILENAME -P dir_to_save_files http://somewebsite.com/index.html 

テストの方法がないため、これをいじる必要があるかもしれません。実際に投稿されているファイルでない場合は、 --post-data=data を使用することもできます。

  • コメントに基づいて編集します。これはおそらく最もエレガントな方法ではありませんが、比較的効果的です。実際のファイル名をターゲットにするために、cut ステートメントと grep ステートメントをいじる必要があるかもしれません。
于 2012-08-08T20:09:10.793 に答える