【问题标题】:How do I save a file using the response header filename with cURL?如何使用带有 cURL 的响应头文件名保存文件?
【发布时间】: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


    【解决方案1】:

    -J/--remote-header-name 是您想要的选项。

    您将 -J 与 -O 结合使用,这使得 curl 使用 URL 中的文件名部分作为命名输出文件的主要方式,然后如果响应中有 Content-disposition: 标头,则 curl将使用该名称。

    【讨论】:

    • 请记住,您应该将 -J/--remote-header-name 与 -O/--remote-name 选项结合使用,否则它不起作用。
    • -OJ 是一个杀手级选项,很容易记住 :)
    • 值得注意的是-J/--remote-header-name如果URL不包含scheme(http://https://)不起作用:github.com/curl/curl/issues/760
    • 考虑到@jchook 对另一个答案的评论,我发现记住-JLO 助记符很方便:)
    • 如果您不想让 curl 在服务器返回 404 时创建文件,您也可以添加 -f。...虽然它不像 -OJ 或-JLO。 :)
    【解决方案2】:
    curl http://example.com/dl.php?file=3123123 -O -J
    

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

    --location-trusted
    --max-redirs 10
    

    【讨论】:

    • 小心--location-trusted,因为它会将 HTTP 身份验证信息转发到重定向,即使跨不同域也是如此。 --location 似乎是一个更安全的选择。
    【解决方案3】:

    curl -OJ 给了我分段错误:尝试一次下载多个 URL 时出现 11 错误。

    相反,我使用了wget。最新版本支持 HTTP Content-Disposition 标头,通常包含文件名信息。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • -o 要求保存文件名 -O 以 dl.pl?ID=2 形式保存到磁盘
      猜你喜欢
      • 2019-03-20
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 2010-11-26
      • 1970-01-01
      • 2014-08-25
      相关资源
      最近更新 更多