2011-09-16 31 views
21

可能重复下载文件时,我保存远程文件名:
How do I save a file using the response header filename with cURL如何使用curl

我需要下载成千上万的图像格式

http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR=0

如果您将该链接粘贴到浏览器中,我t试图下载一个名为1.jp2的文件

我想用curl来做同样的事情。然而,当我运行

卷曲-I“http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR=0

文件名被报告为404.txt,您可以下载并看到它实际上是我想要的文件。我不能使用-O选项,因为分配给文件的名称不好,而且我有技术上的理由需要系统上使用的实际名称。

如何让curl下载相同的文件我在浏览器中检索时没有问题?谢谢。

+0

我的猜测是,这与调用者的用户代理有某种关系,尽管我只是尝试添加chrome的UA而没有帮助。 –

回答

34

[编辑]我删除了我在修改标题尝试...该解决方案就简单多了![/编辑]

尤里卡!该解决方案是使用-O -J

-O, --remote-name   Write output to a file named as the remote file 
-J, --remote-header-name Use the header-provided filename 

所以......

curl -O -J 'http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR=0' 

ただ!我不得不升级我的CURL。我有v 7.19,不支持-J但是7.22(这是最新的)。

+1

@ Dr.Debel你只需要'-J'而不是'-H'只是:'curl -O -J'http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR= 0'' –

-1

你可以使用-o选项吗?例如

curl 'http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR=[0-9]' -o "#1.jpg" 
+0

他说在他的问题中,他不能使用-O,因为他不希望文件名是showfile.exe?等。注意! :) –

+0

那么,你也应该注意。它是一个小的“o”,它具有让用户定义文件名的功能。 –

+0

在这种情况下,用户无法定义文件名......它来自传入响应的标题 –