如何使用wget或curl在表单提交和302重定向后下载文件

时间:2014-05-04 19:03:50

标签: curl wget

我正在尝试从命令行下载CSV文件。您可以在表单字段中输入库存单,单击下载,然后下载文件。这是流程:

有问题的网站是here

流程如下:

  1. 浏览至http://www.cboe.com/DelayedQuote/QuoteTableDownload.aspx
  2. 在表单字段中输入自动收报机并单击下载
  3. 表单操作POST到http://www.cboe.com/DelayedQuote/QuoteTableDownload.aspx
  4. 响应为302,位置标头设置为http://www.cboe.com/DelayedQuote/QuoteData.dat
  5. 浏览器遵循重定向并获取http://www.cboe.com/DelayedQuote/QuoteData.dat
  6. 浏览器下载QuoteData.dat这是我想要的CSV
  7. 显示请求/响应的图片:

    After POST

    After redirect

    Chrome的RestClient也会显示流量 Restclient

    Wget跟随最初的302到QuoteData.dat URL,但在再次重定向之前不下载该文件。

    wget result

    我已经复制了用于wget和curl的标题和cookie,但没有成功。我已经从Chrome Inspector“复制为Curl”但没有成功。我也玩过casperjs,但是我已经进一步了解了curl和wget。

    我现在有点痴迷于搞清楚:)任何帮助都会受到赞赏。

    UPDATE:这是我正在使用的wget命令:

    wget --post-file=cboe_form_data.txt -L http://www.cboe.com/DelayedQuote/QuoteTableDownload.aspx
    

    cboe_form_data.txt是从Chrome检查员获取的帖子数据:http://sandalsoft.com/cboe_form_data.txt

2 个答案:

答案 0 :(得分:1)

该网站似乎需要Referer标题:

wget --post-file=cboe_form_data.txt \
--header='Referer: http://www.cboe.com/DelayedQuote/QuoteTableDownload.aspx' \
http://www.cboe.com/DelayedQuote/QuoteTableDownload.aspx

使用此命令,“QuoteData.dat”GET请求将以Referer标头为特色。该请求的响应代码为200,并包含CSV。

Referer标头不存在时,“QuoteData.dat”GET请求返回代码302和“对象移动”HTML页面。在这种情况下,客户端将被发送回“QuoteTableDownload.aspx”。

答案 1 :(得分:0)

执行wget ....../QuotrTableDownload.aspx时,它会下载这个aspx文件,对于..... / Quitedata.dat,wget将它们视为外来文件(它们不在.... / QuoteTableDownload.aspx中),所以你需要--span-hosts开关。去..... / QuoteData.dat,这个选项可能有用。:)