使用带有列表的R表单在POST中刮取数据

问题描述 投票:0回答:1

我试图通过查看Safari网络选项卡使用我可以看到的API来搜索一些Web数据。

如果作为json传递,则API似乎没有正确获取表单参数,或者如果我尝试将它们作为URLEncoded传递,则我从R获得错误。我看不出我做错了什么?我怀疑部分问题是我的表单是一个包含列表的列表。

请求Safari网络选项卡中显示的数据

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

HTTR Post模仿以上

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

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

verbose的输出表明参数包括在内:

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

调整表格类型

我可以看到上面没有使用正确的表单类型,所以我将encode更改为“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
r json web-scraping http-post httr
1个回答
0
投票

固定!我不得不使用Query而不是Body,并在每个项目之后添加[]。

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

resp<-POST(URL, query=query, verbose())
© www.soinside.com 2019 - 2024. All rights reserved.