ブラウザでこのURLに移動すると、302(一時的に移動)要求が開始され、ファイルがダウンロードされます。
http://www.targetsite.com/target.php/?event=download&task_id=12
Chromeネットワークツールを介して実際に何が起こっているかを見ると、リダイレクトは動的に生成されたパスに行き、ダウンロード直後にキャンセルされます。つまり、フルパスを知っていても手動で呼び出す時間はありません。
では、コマンドラインを使用して、ブラウザのアクションをどのように模倣できますか?
私は試した
curl --cookies bin/cookies.txt -O -L " http://www.targetsite.com/target.php/?event=download&task_id=12 " --compressed
しかし、これは単に意味のないものを返します。この目的は、サイトに移動することなくプログラムでこのファイルをダウンロードすることです。残念ながら、ログインの背後にあるため、ここでサイトを共有することはできません。
curl
がHTTPリダイレクトに従うようにするには、-L
または--location
オプションを指定する必要があります。
man curl
からの引用:
-L, --location
(HTTP/HTTPS) If the server reports that the requested page has
moved to a different location (indicated with a Location: header
and a 3XX response code), this option will make curl redo the
request on the new place. If used together with -i, --include or
-I, --head, headers from all requested pages will be shown. When
authentication is used, curl only sends its credentials to the
initial Host. If a redirect takes curl to a different Host, it
won't be able to intercept the user+password. See also --loca‐
tion-trusted on how to change this. You can limit the amount of
redirects to follow by using the --max-redirs option.
When curl follows a redirect and the request is not a plain GET
(for example POST or PUT), it will do the following request with
a GET if the HTTP response was 301, 302, or 303. If the response
code was any other 3xx code, curl will re-send the following
request using the same unmodified method.