使用 R 抓取数据 - POST 中带有列表的表单
Scraping Data using R - Form with List in POST
我正在尝试使用 API 抓取一些网络数据,我可以看到正在通过查看 Safari 网络选项卡进行调用。
如果作为 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 确实 return 结果,但似乎忽略了特定参数。
verbose 的输出表明包含了参数:
{"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
已修复!我不得不使用 Query 而不是 Body 并在每个项目后添加 []。
query <- list(
"section[]" = 1,
"section[]" = 4,
"period[]" = 20170501
)
resp<-POST(URL, query=query, verbose())
我正在尝试使用 API 抓取一些网络数据,我可以看到正在通过查看 Safari 网络选项卡进行调用。
如果作为 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 确实 return 结果,但似乎忽略了特定参数。
verbose 的输出表明包含了参数:
{"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
已修复!我不得不使用 Query 而不是 Body 并在每个项目后添加 []。
query <- list(
"section[]" = 1,
"section[]" = 4,
"period[]" = 20170501
)
resp<-POST(URL, query=query, verbose())