【发布时间】:2021-08-01 10:18:13
【问题描述】:
首先让我说我了解如何使用“httr”和“crul”包进行 POST 请求。我正在开发一种异步方法,使用基本的“curl”包发送多个带有唯一 JSON 正文请求的 POST 请求。我有正当理由尝试使用此软件包,但更重要的是,我只是决心让它发挥作用。这可能是不可能的,或者我什至可能在“curl”中尝试错误的功能......但想看看是否有人有任何想法。
我正在尝试使用 curl_fetch_multi() 作为 POST 请求发送一个 post 请求,其中包含这样的正文中的 JSON...
{
"configuration": {
"Id": 4507
},
"age": 0,
"zip": 32411,
"Date": "2020-12-23"
}
我已经成功地至少从 API 中获取了错误消息,指示无效的主体输入,使用的内容类似于从包含我需要提交的每个主体的对象开始
library(curl)
library(jsonlite)
library(magrittr)
pool <- new_pool()
# results only available through call back function
cb <- function(req){cat("done:", req$url, ": HTTP:", req$status, "\n", "content:", rawToChar(req$content), "\n")}
# Create request for each body
for(i in 1:nrow(df)){
curl_fetch_multi(
"http://api.com/values?api_key=1234",
done = cb,
pool = pool,
handle = new_handle() %>%
handle_setopt(post = TRUE) %>%
handle_setheaders("Content-Type"="application/vnd.v1+json") %>%
handle_setform(body = df$body[[i]]) ###df$body[[i]] is a JSON string
)
}
# This actually performs requests
out <- multi_run(pool = pool)
done: http://api.com/values?api_key=1234 : HTTP: 400
content: {"errors":[{"code":"Service.input.invalid","message":"Invalid input"}]}
done: http://api.com/values?api_key=1234 : HTTP: 400
content: {"errors":[{"code":"Service.input.invalid","message":"Invalid input"}]}
....
我 90% 肯定这与它尝试在句柄的 handle_setform() 设置中调用 JSON 的方式有关。这是关于我的头绪和文档稀缺的地方。
另外,我很确定 JSON 的结构是正确的,因为我可以在其他包中毫无问题地使用它们。
任何帮助将不胜感激。
【问题讨论】: