如何使用 header 和 R 中的数据选项使用 httr::POST 发出 POST 请求?
How to make a POST request with header and data options in R using httr::POST?
我正在尝试使用 httr::POST
使用数据和 header 信息发出 POST 请求。我可以看到 how to make a POST request,但我无法让它与 curl 的数据 (-d
) 和 header (-H
) 选项一起使用。
这在我的终端中完美运行(显然 data/api 不同,但格式完全相同)
curl -H "Accept: application/json" -H "Content-type: application/json" -d '{"name": "Fred", "age": "5"}' "http://www.my-api.com"
问题
如何使用 httr::POST
提出上述 POST 请求(使用 header 和数据)?
到目前为止我尝试了什么
library(jsonlite)
my_data <- list(name="Fred", age="5") %>% toJSON
post_url <- "http://www.my-api.com"
r <- POST(post_url, body = my_data) # Data goes in body, I guess?
stop_for_status(r)
我明白了
Error: Bad Request (HTTP 400).
进一步检查r
r
Response ["http://www.my-api.com"]
Date: 2019-07-09 17:51
Status: 400
Content-Type: text/html; charset=UTF-8
<EMPTY BODY>
你可以试试这个;添加了内容类型和 headers:
link <- "http://www.my-api.com"
df <- list(name="Fred", age="5")
httr::POST(url = link,
body = jsonlite::toJSON(df, pretty = T, auto_unbox = T),
httr::add_headers(`accept` = 'application/json'),
httr::content_type('application/json'))
我正在尝试使用 httr::POST
使用数据和 header 信息发出 POST 请求。我可以看到 how to make a POST request,但我无法让它与 curl 的数据 (-d
) 和 header (-H
) 选项一起使用。
这在我的终端中完美运行(显然 data/api 不同,但格式完全相同)
curl -H "Accept: application/json" -H "Content-type: application/json" -d '{"name": "Fred", "age": "5"}' "http://www.my-api.com"
问题
如何使用 httr::POST
提出上述 POST 请求(使用 header 和数据)?
到目前为止我尝试了什么
library(jsonlite)
my_data <- list(name="Fred", age="5") %>% toJSON
post_url <- "http://www.my-api.com"
r <- POST(post_url, body = my_data) # Data goes in body, I guess?
stop_for_status(r)
我明白了
Error: Bad Request (HTTP 400).
进一步检查r
r
Response ["http://www.my-api.com"]
Date: 2019-07-09 17:51
Status: 400
Content-Type: text/html; charset=UTF-8
<EMPTY BODY>
你可以试试这个;添加了内容类型和 headers:
link <- "http://www.my-api.com"
df <- list(name="Fred", age="5")
httr::POST(url = link,
body = jsonlite::toJSON(df, pretty = T, auto_unbox = T),
httr::add_headers(`accept` = 'application/json'),
httr::content_type('application/json'))