【发布时间】:2021-08-26 18:17:12
【问题描述】:
我有一个 cURL 命令,我想使用 httr 包将其转换为 R。 cURL 命令看起来像这样(显然,鉴于某些保密限制,我无法发布它的全部范围):
curl --request POST \
--url https://api.cfb.com/v1/players/110960703/stats \
--header 'Accept: application/json' \
--header 'Authorization: Basic ThisIsWhereTheAPIKeyGoes==' \
--header 'Content-Type: application/json' \
--data '
{
"statsContext": {
"statsId": "1"
},
"responses": [
{
"type": "ReceiverStats",
"QuestionId": "466069",
"ResponseId": "1898226"
}
]
}
'
我想将其转换为如下所示的 HTTR 脚本:
ExportIdAPI <- POST(
'https://api.cfb.com/v1/players/110960703/stats',
accept_json(),
content_type_json(),
add_headers(Authorization = Basic ThisIsWhereTheAPIKeyGoes==),
encode = "json",
body=list(statsId = 1,
QuestionId = 466069,
ResponseId = 1898226))
问题是,这个脚本不起作用。这个脚本有什么作用:
ExportIdAPI <- POST(
'https://api.cfb.com/v1/players/110960703/stats',
accept_json(),
content_type_json(),
add_headers(Authorization = Basic ThisIsWhereTheAPIKeyGoes==),
encode = "json",
body=list(statsId = 1))
根据原始 curl 请求的结构,我只是没有将其存储在 body=list 语句中吗?
编辑:我应该注意到这个脚本运行得非常好。我只是不希望它以这种方式构建,我希望它能够更好地反映我试图从上面实现的格式。
headers = c(
`Accept` = 'application/json',
`Authorization` = 'Basic ThisIsWhereTheAPIKeyGoes==',
`Content-Type` = 'application/json'
)
data = ' { "statsContext": { "statsId": "1" }, "responses": [ { "type": "SurveyResponse", "QuestionId": "466069", "ResponseId": "1898226" } ] } '
res <- httr::POST(url = 'https://api.cfb.com/v1/players/110960703/stats', httr::add_headers(.headers=headers), body = data)
编辑 2:根据 MrFlick 的回复,我尝试运行:
ExportIdAPI <- POST(
'https://api.cfb.com/v1/players/110960703/stats',
accept_json(),
content_type_json(),
add_headers(Authorization = Basic ThisIsWhereTheAPIKeyGoes==),
encode = "json",
data = list(statsContext = list(statsId = 1), responses= list(list(type="SurveyResponse", QuestionId="466069", ResponseId="1898226")))
)
但我遇到了以下错误:
Response [https://api.cfb.com/v1/players/110960703/stats]
Date: 2021-08-26 20:58
Status: 400
Content-Type: application/json; charset=utf-8
Size: 144 B
{
"errors": [
{
"code": "INVALID_PARAMETER",
"text": "The body of the request is null or cannot be parsed."
}
]
【问题讨论】:
-
@MrFlick 查看我刚刚所做的编辑。希望这会有所帮助。
-
@MrFlick 感谢您的回复。我尝试输入您在上面写的内容,但我仍然收到错误消息。请查看编辑。
-
@MrFlick 只是跟进
-
POST()请求应该使用我的示例中的POST(body=data),或者使用POST(body=list(...))没有POST(data=)参数。我在下面添加了一个完整的答案。