将 CURL 翻译成 R
Translating CURL to R
主要是为了我自己的理解,您如何使用 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 状态。
我很确定问题出在设置 headers 上。
您可以使用 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)
这是一个非常简单的映射。
关键是转义 header 名字,以防有人好奇。直译如下:
POST("http://httpbin.org/post",
add_headers(`X-Api-Key`="abc123", `Content-Type` = "application/json"),
body='{"parameters": [ 1, "foo", "bar" ]}')
在此网页中,您可以将 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)
主要是为了我自己的理解,您如何使用 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 状态。
我很确定问题出在设置 headers 上。
您可以使用 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)
这是一个非常简单的映射。
关键是转义 header 名字,以防有人好奇。直译如下:
POST("http://httpbin.org/post",
add_headers(`X-Api-Key`="abc123", `Content-Type` = "application/json"),
body='{"parameters": [ 1, "foo", "bar" ]}')
在此网页中,您可以将 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)