【问题标题】:httr: retrieving data with POST()httr:使用 POST() 检索数据
【发布时间】:2014-12-09 04:20:33
【问题描述】:

免责声明:虽然我已经设法使用 httr 的 POST 函数从另一个来源获取数据,但请大家知道,我在 httr 和 HTML 表单方面是一个完整的 n00b。

我想使用 httr 将一些数据从网站直接带入 R。我的第一次尝试涉及将命名列表传递给主体 arg(如 this vignette 所示)。但是,我注意到表单输入名称中的方括号(至少我认为它们是表单输入参数)。因此,我尝试将正文作为字符串传递,因为我认为它应该出现在请求正文中:

url <- 'http://research.stlouisfed.org/fred2/series/TOTALSA/downloaddata'
query <- paste('form[native_frequency]=Monthly', 'form[units]=lin',
                'form[frequency]=Monthly', 'form[obs_start_date]="1976-01-01"',
                'form[obs_end_date]="2014-11-01"', 'form[file_format]=txt'
                sep = '&')
response <- POST(url, body = query)

无论如何,上面的代码只是返回网页源代码,我无法弄清楚如何正确提交表单,以便它返回与手动单击表单的“下载数据”按钮相同的数据。

在 Chrome 上的开发人员工具/网络中,它在 Content-Disposition 下的响应标头中指出,当我手动单击表单上的“下载数据”按钮时,有一个包含数据的文本文件附件。它似乎不在与上述代码中的响应对象关联的任何标头中。为什么 POST 请求没有返回这个文件——包含数据的文件在哪里?

感觉好像我遗漏了一些明显的东西。有人愿意帮我把这些点联系起来吗?

【问题讨论】:

    标签: html r forms httr http-post


    【解决方案1】:

    通常,如果您要使用httr,您可以让它为您构建和编码数据,您只需通过表单值列表传递信息。试试

    url<-"http://research.stlouisfed.org/fred2/series/TOTALSA/downloaddata"
    query <- list('form[native_frequency]'="Monthly",
        'form[units]'="lin",
        'form[frequency]'="Monthly",
        'form[obs_start_date]'="1996-01-01",
        'form[obs_end_date]'="2014-11-01",
        'form[file_format]'="txt")
    response <- POST(url, body = query)
    content(response, "text")
    

    返回看起来像

    [1] "Title:               Total Vehicle Sales\r\nSeries ID:           TOTALSA\r\nSource:   
    US. Bureau of Economic Analysis\r\nRelease:             Supplemental Estimates, Motor 
    Vehicles\r\nSeasonal Adjustment: Seasonally Adjusted Annual Rate\r\nFrequency:           Monthly\r\nUnits:               
    Millions of Units\r\nDate Range:          1996-01-01 to 2014-11-
    01\r\nLast Updated:        2014-12-05 7:16 AM CST\r\nNotes:               \r\n\r\nDATE       
    VALUE\r\n1996-01-01  14.8\r\n1996-02-01  15.6\r\n1996-03-01  16.0\r\n1996-04-01  15.5\r\n1996-05-01 
    16.0\r\n1996-06-01  15.3\r\n1996-07-01  15.1\r\n1996-08-01  15.5\r\n1996-09-01  15.5\r\n1996-10-01   15.3\r
    

    【讨论】:

    • 感谢您的回复——我完全忘记了您可以为键和值创建带有字符串的命名列表。不幸的是,这仍然不会以文本格式返回制表符分隔的数据,否则您可以通过单击提交按钮获得这些数据。我将编辑我的原始问题以澄清。
    • @circld 你得到什么回应?我看到制表符分隔的数据作为内容返回。我已经更新了我的帖子以显示我得到了什么。你想要什么样的不同形式?
    • 不,你完全正确。在命名列表中有错字。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多