将CURL转换为R.

时间:2015-01-20 21:26:29

标签: r curl httr

主要是出于我自己的理解,你如何使用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状态。我的卷曲版本完美无缺。

也尝试过:

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

也获得400状态。

我很确定问题在于设置标题。

3 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:0)

关键是要逃避标题名称,万一有人好奇。直接翻译如下:

POST("http://httpbin.org/post",
add_headers(`X-Api-Key`="abc123", `Content-Type` = "application/json"),
body='{"parameters": [ 1, "foo", "bar" ]}')

答案 2 :(得分:0)

在此网页中,您可以将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)