在POST中使用带有列表的R-表单收集数据

时间:2019-03-24 18:06:03

标签: r json web-scraping http-post httr

我正在尝试使用一些API来抓取一些网络数据,通过查看Safari网络标签可以看到正在调用的API。

如果作为json传递,API似乎无法正确获取表单参数,或者如果我尝试将其作为URLEncoded传递,我会从R中收到错误消息。我看不到我在做什么错?我怀疑部分问题是我的表单是包含列表的列表。

请求数据,如Safari网络标签中所示

MIME Type: application/x-www-form-urlencoded; charset=UTF-8
method: POST
section[]: 1
section[]: 4
period[]: 20170501

HTTR帖子来模仿以上

form <- list(
    section = list(1,4),
    period = 20170501
)
resp<-POST(URL, body=form, encode="json", verbose())

然后代码运行没有错误,API确实返回了结果,但似乎忽略了特定参数。

详细输出表明已包含参数:

{"section":[1,4],"period":20170501}

表单类型调整

我可以看到上面没有使用正确的表单类型,所以我将编码更改为“ form”,以便表单以x-www-form-urlencoded的形式发送。但是,然后出现以下错误。

Error in vapply(elements, encode, character(1)) : 
  values must be length 1,
 but FUN(X[[1]]) result is length 2

1 个答案:

答案 0 :(得分:0)

已修复!我必须使用Query而不是Body,并在每个项目后面添加[]。

query <- list(
    "section[]" = 1,
    "section[]" = 4,
    "period[]" = 20170501
)

resp<-POST(URL, query=query, verbose())