环境:
Windows 64 cURL 构建
C:>curl64.exe -V(ersion)
- curl 7.53.1 (x86_64-w64-mingw32) libcurl/7.53.1 WinSSL zlib/1.2.8 WinIDN libssh2/1.7.0_DEV
- 协议:dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
- 功能:IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz
我的网站有一个用于文件下载的 PHP 包,需要 HTTP Post 来指定要下载的文件。
当我使用浏览器时,我会看到一个“打开/保存”对话框,我可以毫无问题地将文件保存到我的电脑中。当我使用 cURL 时,请求的文件只会流式传输到控制台。
如何执行 cURL HTTP Post 请求来下载文件然后保存它?
- 有很多使用帖子上传文件的示例......
- 一般来说,有很多关于发帖的例子......
- 有很多简单下载文件的示例(-O/o)...
但是我找不到保存 Post 命令返回的文件的示例。
我已经尝试了以下三个 curl 命令行:
C:\>curl64.exe -d“下载=XYZ.zip&email=&submit=下载”http://www.example.com/downloads/dl.php
C:\>curl64.exe -d“下载=XYZ.zip&email=&submit=下载”-O XYZ.ziphttp://www.example.com/downloads/dl.php
curl:远程文件名没有长度!
C:\>curl64.exe -d“下载=XYZ.zip&email=&submit=下载”http://www.example.com/downloads/dl.php> XYZ.zip
访问被拒绝。
在前两个例子中,文件内容被传输到控制台,而不是文件被保存或给我一个保存的选项。
在第三个示例中,我尝试重定向输出,但收到“访问被拒绝”错误。我是 Windows 系统的本地管理员。我尝试了不同的目录。仍然收到相同的错误。
答案1
读了很多书(一整夜)后...我发现,在精疲力竭的时候做研究显然是不好的,你真的应该睡觉。[笑]
之前,我看到太多 cURL 示例,其中一些使用 -O 选项,而另一些使用 -o 选项进行文件下载。由于一切都模糊不清,我没有意识到它们是两个不同的选项。在阅读了 cURL 帮助一百遍之后,我终于看到了区别:
- -O 表示下载文件
- -o 用于将 cURL 的输出重定向到文件而不是标准输出
此命令行有效:
C:\cURLtest>curl64.exe -d“下载=XYZ.zip&email=&submit=下载”-o XYZ.ziphttp://www.example.com/downloads/dl.php
对于那些花时间研究该问题(事实并非如此)的人...请原谅这个笨蛋浪费了你的时间。