1

主要出于我自己的理解,您将如何使用 RCurl 或 httr 将以下玩具 CURL 示例转换为 R:

  curl -v -X POST \
    https://someurl/endpoint \
-H "Content-Type: application/json" \
-H 'X-Api-Key: abc123' \
-d '{"parameters": [ 1, "foo", "bar" ]}'

除了简单的 GET 请求之外,我发现这两个包都有些尴尬。

我试过了:

library(httr)
 POST("https://someurl/endpoint", authenticate("user", "passwrd"), 
body = '{"parameters": [ 1, "foo", "bar" ]}', content_type_json())

获得 400 状态。我的 Curl 版本完美运行。

也试过:

POST("https://someurl/endpoint", add_headers('X-Api-Key: abc123'), 
body = '{"parameters": [ 1, "foo", "bar" ]}', content_type_json())

同时获得400状态。

我很确定问题出在设置标题上。

4

3 回答 3

2

在此网页中,您可以将 curl 转换为多种语言:https ://curl.trillworks.com/#r

在这种情况下,在 R 中是:

require(httr)

headers = c(
  'Content-Type' = 'application/json',
  'X-Api-Key' = 'abc123'
)

data = '{"parameters": [ 1, "foo", "bar" ]}'

res <- httr::POST(url = 'https://someurl/endpoint', httr::add_headers(.headers=headers), body = data)
于 2020-01-03T15:01:02.273 回答
1

您可以使用 httpbin.org 进行测试。尝试:

curl -v -X POST \
    https://httpbin.org/post \
-H "Content-Type: application/json" \
-H 'X-Api-Key: abc123' \
-d '{"parameters": [ 1, "foo", "bar" ]}'

并保存结果,然后看看它与:

library(httr)

result <- POST("http://httpbin.org/post",
               verbose(),
               encode="json",
               add_headers(`X-Api-Key`="abc123"),
               body=list(parameters=c(1, "foo", "bar")))

content(result)

这是一个非常简单的映射。

于 2015-01-20T22:57:36.083 回答
0

关键是转义标题名称,以防有人好奇。直接翻译如下:

POST("http://httpbin.org/post",
add_headers(`X-Api-Key`="abc123", `Content-Type` = "application/json"),
body='{"parameters": [ 1, "foo", "bar" ]}')
于 2015-01-21T15:30:36.793 回答