如何使用响应头文件名和cURL保存文件

问题描述:

此问题与cURL的命令行版本有关。如何使用响应头文件名和cURL保存文件

我试图从cgi脚本下载文件。

http://someserver/perl/dl.pl?ID=2

使用浏览器的文件名出现为“remotefilename.gz” 卷曲想将文件保存为“dl.pl?ID=2”

我如何卷曲救从响应头文件的文件?

如果您有足够新的卷曲(版本7.20.0或更高版本),-J/--remote-header-name是您想要的。

您可以使用-J和-O一起使用,它使curl使用URL中的文件名部分作为命名输出文件的主要方式,然后如果响应中存在Content-disposition:标头,curl将会改用这个名字。

+6

心目中,你应该使用-J/- 结合远程头名-O/- 远程名称选项,否则它不起作用。 – sepehr 2013-11-14 17:21:54

+1

'-OJ'是一个杀手选项,很容易记住:) – colminator 2018-03-08 21:23:52

您可以尝试-o-O选项。

+2

-o要求一个文件名保存到 -O保存到磁盘dl.pl?ID=2 – John 2010-04-23 13:12:04

curl http://example.com/dl.php?file=3123123 -O -J 

如果服务器使用重定向使用这些:

--location-trusted 
--max-redirs 10 
+0

请小心'--location-trusted',因为它会将HTTP auth信息转发到重定向,即使跨不同的域。 '--location'似乎是一个更安全的选择。 – jchook 2016-03-19 19:29:01

我发现,卷曲-OJ是给我分段错误:试图同时下载多个URL时11错误。

我的解决方案是使用wget。最新版本支持HTTP Content-Disposition标头,通常包含文件名信息。

wget --content-disposition http://example.com/download/url