【发布时间】:2010-04-23 12:46:31
【问题描述】:
这个问题与 cURL 的命令行版本有关。
我正在尝试从 CGI 脚本下载文件。
http://example.com/perl/dl.pl?ID=2
使用浏览器,文件名显示为remotefilename.gz。
cURL 想将文件保存为dl.pl?ID=2。
如何让 cURL 保存到具有响应标头中文件名的文件?
【问题讨论】:
标签: curl
这个问题与 cURL 的命令行版本有关。
我正在尝试从 CGI 脚本下载文件。
http://example.com/perl/dl.pl?ID=2
使用浏览器,文件名显示为remotefilename.gz。
cURL 想将文件保存为dl.pl?ID=2。
如何让 cURL 保存到具有响应标头中文件名的文件?
【问题讨论】:
标签: curl
-J/--remote-header-name 是您想要的选项。
您将 -J 与 -O 结合使用,这使得 curl 使用 URL 中的文件名部分作为命名输出文件的主要方式,然后如果响应中有 Content-disposition: 标头,则 curl将使用该名称。
【讨论】:
-OJ 是一个杀手级选项,很容易记住 :)
-J/--remote-header-name如果URL不包含scheme(http://或https://)不起作用:github.com/curl/curl/issues/760。
-JLO 助记符很方便:)
curl http://example.com/dl.php?file=3123123 -O -J
如果服务器使用重定向,请使用这些:
--location-trusted
--max-redirs 10
【讨论】:
--location-trusted,因为它会将 HTTP 身份验证信息转发到重定向,即使跨不同域也是如此。 --location 似乎是一个更安全的选择。
curl -OJ 给了我分段错误:尝试一次下载多个 URL 时出现 11 错误。
相反,我使用了wget。最新版本支持 HTTP Content-Disposition 标头,通常包含文件名信息。
wget --content-disposition http://example.com/download/url
【讨论】:
您可以尝试-o 或-O 选项。
【讨论】: