【问题标题】:How to make a POST request with header and data options in R using httr::POST?如何使用 httr::POST 在 R 中使用标头和数据选项发出 POST 请求?
【发布时间】:2019-07-10 14:48:51
【问题描述】:

我正在尝试使用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>

【问题讨论】:

  • 你看过文档吗? ?httr::POST 引用了httr::add_headers,其中有例子,intro vignette
  • 这对我有用。也许这是您的软件包版本?我有 httr 1.4.0、jsonlite 1.6、curl 3.2
  • @camille 谢谢。我已经检查了两者,但没有意识到add_headers 可以使用httr::GET 以外的功能。非常感谢

标签: r httr


【解决方案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'))

【讨论】:

  • 太棒了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多