Bash脚本 - POST后使用Curl获取文件名

时间:2012-08-08 18:16:09

标签: bash curl

我正在编写一个bash脚本来从远程网站下载文件。但是,远程网站需要先提交一个POST表单,然后它返回一个文件。我设法找到了解决方案,它运行得很好。这是它:

curl -F 'data=filename.rar' --user-agent 'Mozilla/4.0 POST' http://somewebsite.com/index.html -v > filename

现在,问题是我必须在服务器返回该文件时重定向STDOUT,否则我的屏幕上会出现乱码。我想要的是,而不是硬编码的'filename',以获得真实的名称文件和重定向STDOUT那里。 使用-sI选项运行curl来获取头文件然后解析文件名不是这里的解决方案,因为curl不接受-I和-F选项的混合。它必须是其中之一,但只能使用-FI can看到标题和服务器也发送文件和它们。有一种方法只获取标题(记住,我还发送帖子数据,以获取文件)所以我可以解析它们并提取文件名?然后我会创建新的curl请求,但现在使用该文件名作为STDOUT值。或者有可能让curl自动从头文件下载到文件名?

3 个答案:

答案 0 :(得分:0)

您可能想要使用curl尝试-o选项。例如:

curl -F 'data=filename.rar' --user-agent 'Mozilla/4.0 POST' -o outputFileName http://somewebsite.com/index.html -v

答案 1 :(得分:0)

根据我之前回答的评论,你可能想尝试wget。

FILENAME=`wget --post-file=filename.rar -P dir_to_save_files http://somewebsite.com/index.html | grep "filename" | cut -d"=" -f2 | awk '{print$1}'`; wget --post-file=filename.rar -O $FILENAME -P dir_to_save_files http://somewebsite.com/index.html 

你可能需要玩这个,因为我没有测试方法。如果它实际上不是一个正在发布的文件,你也可以使用--post-data = data。

  • 根据评论进行修改。这可能不是最优雅的方式,但应该相对有效。您可能需要使用cut语句和grep语句来使其定位实际文件名。

答案 2 :(得分:0)

最后......解决方案是在Wget中使用--content-disposition选项来保留原始文件名。