如何使用httr :: POST在R中发出带有标头和数据选项的POST请求?

时间:2019-07-09 18:17:12

标签: r httr

我正在尝试使用httr::POST发出包含数据和标头信息的POST请求。我可以看到how to make a POST request,但无法使其与curl的数据(-d)和标头(-H)选项一起使用。

这在我的终端上非常有效(显然使用不同的数据/ api,但格式完全相同)

curl -H "Accept: application/json" -H "Content-type: application/json" -d '{"name": "Fred", "age": "5"}' "http://www.my-api.com"

问题

如何使用httr::POST发出上述POST请求(带有标头和数据)?

到目前为止我尝试过的一切

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>

1 个答案:

答案 0 :(得分:1)

您可以尝试一下;并添加了内容类型和标题:

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'))