【问题标题】:How to correctly format body of POST request如何正确格式化 POST 请求的正文
【发布时间】:2021-05-27 20:43:31
【问题描述】:

我正在通过 REST API 向网站添加一个页面。我在 bash 中使用以下内容,它可以工作。它创建一个具有指定标题和正文内容的新页面。

token="dfrer4e"
curl -X POST -H "Authorization: Bearer $token" \
    https://api/pages \
    -d wiki_page[title]=New title \
    -d wiki_page[body]=New content

我正在尝试使用 R 包 httr 来做同样的事情。

library(httr)
set_config(add_headers("Authorization"=paste0("Bearer dfrer4e")))

这在我只使用标题时有效。它创建一个具有指定标题的新页面。

POST(url="https://api/pages/",body="wiki_page[title]=New title")

但我不确定如何将身体部分也包括在内。

尝试:

我尝试将主体提供为矢量,但它无法正常工作。它将两者结合到标题中。身体仍然是空的。

POST(url="https://api/pages/",body=c("wiki_page[title]=New page","wiki_page[body]=New content"))

我尝试将正文作为列表提供,但它返回错误。

POST(url="https://api/pages/",body=list("wiki_page"=list("title"="New title","body"="New content")))
Error in curl::handle_setform(handle, .list = req$fields) : 
  Unsupported value type for form field 'wiki_page'.

我尝试将正文提供为 JSON,但它返回状态 400 错误。

j <- jsonlite::toJSON(list("wiki_page"=list("title"="New title","body"="New content")))
POST(url="https://api/pages/",body=j,encode="json")

很遗憾,我无法创建可重现的示例。

【问题讨论】:

    标签: r rest httr


    【解决方案1】:

    将该命令转换为httr 的正确方法是

    POST(url="https://api/pages/", 
       body=list(
         "wiki_page[title]" = "New page", 
         "wiki_page[body]" = "New content")
    )
    

    您需要将正文中的名称和值分开,以便正确编码值。

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2021-07-22
      • 2014-11-29
      • 1970-01-01
      • 2021-11-12
      • 2021-12-11
      相关资源
      最近更新 更多