web-dev-qa-db-ja.com

cURL HTTP Postリクエストを実行してファイルをダウンロードし、そのファイルを保存するにはどうすればよいですか?

環境:
Windows 64cURLビルド
C:> curl64.exe -V(ersion)
-curl7.53.1(x86_64-w64-mingw32)libcurl/7.53.1 WinSSL zlib/1.2.8 WinIDN libssh2/1.7.0_DEV
-プロトコル:dictファイルftp ftps Gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
-機能:IDNIPv6ラージファイルSSPIKerberos SPNEGO NTLM SSL libz

私のWebサイトにはファイルダウンロード用のPHPパッケージがあり、ダウンロードするファイルを指定するためにHTTPPostが必要です。

ブラウザを使用していると、OPEN with/SAVEダイアログが表示され、ファイルを問題なくコンピュータに保存できます。 cURLを使用している場合、要求されたファイルはコンソールにストリーミングされるだけです。

CURL HTTP Postリクエストを実行してファイルをダウンロードし、保存するにはどうすればよいですか?

  • 投稿付きのファイルをアップロードするための多くの例...
  • 一般的に投稿を行うための多くの例...
  • 単にファイルをダウンロードするための多くの例(-O/o)...

しかし、Postコマンドが返すファイルを保存する例が見つかりません。

私はこれらの3つのcurlコマンドラインを試しました:

C:> curl64.exe -d "download = XYZ.Zip&email =&submit = Download" http://www.example.com/downloads/dl.php

C:> curl64.exe -d "download = XYZ.Zip&email =&submit = Download" -O XYZ.Zip http://www.example.com/downloads/dl.php
curl:リモートファイル名に長さがありません!

C:> curl64.exe -d "download = XYZ.Zip&email =&submit = Download" http://www.example.com/downloads/dl.php > XYZ.Zip
アクセスが拒否されました。

最初の2つの例では、ファイルを保存したり、保存するオプションを提供したりする代わりに、ファイルの内容をコンソールにストリーミングします。

3番目の例では、出力をリダイレクトしようとしましたが、「アクセスが拒否されました」というメッセージが表示されました。エラー。私はWindowsシステムのローカル管理者です。別のディレクトリを試しました。それでも同じエラーが発生します。

4
CBruce

たくさん読んだ後(一晩中)...あなたが燃え尽きたときに研究をするのは明らかに悪いことであり、代わりに本当に眠るべきであることがわかりました。 [にやにや]

以前、ファイルのダウンロードに-Oオプションを使用したものと、-oオプションを使用したものがあるcURLの例が多すぎました。すべてがぼんやりしていたので、それらが2つの異なるオプションであることに気づきませんでした。 cURLヘルプを100回読んだ後、ついに違いがわかりました。

  • -Oはファイルをダウンロードするためのものです
  • -oは、cURLの出力をstdoutではなくファイルにリダイレクトするためのものです

このコマンドラインは機能します:

C:\ cURLtest> curl64.exe -d "download = XYZ.Zip&email =&submit = Download" -o XYZ.Zip http://www.example.com/downloads/dl.php

問題の調査に時間を費やした人(そうではなかった)へ...あなたの時間を無駄にしたこのダミーを許してください。

1
CBruce