这个 curl 请求的 R 等价物是什么
What would be the R equivalent for this curl request
我在 curl
有这样的请求
curl -H "Content-Type:application/json" \
-X GET 127.0.0.1:8084/clusterpredict/byheaders \
-v \
-b "text1" \
-A "text2"
如何在 R 中的 RCurl
或 httr
库中执行相同的操作?
在httr
中:
-A
/ --user-agent
转换为 user_agent()
-b
/ --cookie
转换为 set_cookies()
但您需要读取 cookie 文件并在对其的调用中设置它们(RCurl
具有构造读取存储的 cookie 文件)。我做出这个假设是因为您在 -b
之后没有使用 "COOKIE1=1; COOKIE2=b"
格式。您也可以在 set_cookies()
中单独设置它们
-H
/ --header
翻译成 add_headers()
但有设置内容类型的特殊函数(见下文)
-v
/ --verbose
转换为 verbose()
-X
/ --request
转换为实际的 VERB
函数(在本例中为 GET()
)
这是一种将 cookie 读入文件以供 set_cookie()
使用的方法(如果您确实在使用 cookie 罐):
ctmp <- read.table("cookies.txt", sep="\t", header=FALSE, stringsAsFactors=FALSE)[,6:7]
crumbs <- setNames(as.character(as.character(ctmp$V6)), ctmp$V7)
因此,您的示例将 httr
转换为:
GET("http://127.0.0.1:8084/clusterpredict/byheaders",
content_type_json(),
user_agent("text2"),
set_cookies(.cookies=crumbs),
verbose())
如果你有单独的饼干和饼干罐:
GET("http://127.0.0.1:8084/clusterpredict/byheaders",
content_type_json(),
user_agent("text2"),
set_cookies(COOKIE1="value1", COOKIE2="value2),
verbose())
请注意,httr
将在同一 R 会话中对同一域的调用之间保留 cookie,因此无需在后续调用中继续指定该文件或那些显式 cookie 值。
您可以将输出值赋给一个变量,然后从中检索内容:
response <- GET("http://127.0.0.1:8084/clusterpredict/byheaders",
content_type_json(),
user_agent("text2"),
set_cookies(COOKIE1="value1", COOKIE2="value2),
verbose())
result <- content(response)
print(str(result))
通常,人们会使用 jsonlite
包或 xml2
包(取决于结果类型)进行解析 vs 依赖内置的 httr
解析,因为你可以更好地控制输出。在这种情况下,它是 JSON,所以:
library(jsonlite)
result <- fromJSON(content(response, as="text"))
print(str(result))
没有实时地址,这很难测试,但可以让您开始使用 httr
。
library(httr)
#curl -H "Content-Type:application/json" -X GET 127.0.0.1:8084/clusterpredict/byheaders -v -b "text1" -A "text2"
GET(
"127.0.0.1:8084/clusterpredict/byheaders",
add_headers(
"Content-Type" = "application/json"
),
set_cookies("text1"),
user_agent("text2"),
verbose() #-v
)
我在 curl
有这样的请求
curl -H "Content-Type:application/json" \
-X GET 127.0.0.1:8084/clusterpredict/byheaders \
-v \
-b "text1" \
-A "text2"
如何在 R 中的 RCurl
或 httr
库中执行相同的操作?
在httr
中:
-A
/--user-agent
转换为user_agent()
-b
/--cookie
转换为set_cookies()
但您需要读取 cookie 文件并在对其的调用中设置它们(RCurl
具有构造读取存储的 cookie 文件)。我做出这个假设是因为您在-b
之后没有使用"COOKIE1=1; COOKIE2=b"
格式。您也可以在set_cookies()
中单独设置它们-H
/--header
翻译成add_headers()
但有设置内容类型的特殊函数(见下文)-v
/--verbose
转换为verbose()
-X
/--request
转换为实际的VERB
函数(在本例中为GET()
)
这是一种将 cookie 读入文件以供 set_cookie()
使用的方法(如果您确实在使用 cookie 罐):
ctmp <- read.table("cookies.txt", sep="\t", header=FALSE, stringsAsFactors=FALSE)[,6:7]
crumbs <- setNames(as.character(as.character(ctmp$V6)), ctmp$V7)
因此,您的示例将 httr
转换为:
GET("http://127.0.0.1:8084/clusterpredict/byheaders",
content_type_json(),
user_agent("text2"),
set_cookies(.cookies=crumbs),
verbose())
如果你有单独的饼干和饼干罐:
GET("http://127.0.0.1:8084/clusterpredict/byheaders",
content_type_json(),
user_agent("text2"),
set_cookies(COOKIE1="value1", COOKIE2="value2),
verbose())
请注意,httr
将在同一 R 会话中对同一域的调用之间保留 cookie,因此无需在后续调用中继续指定该文件或那些显式 cookie 值。
您可以将输出值赋给一个变量,然后从中检索内容:
response <- GET("http://127.0.0.1:8084/clusterpredict/byheaders",
content_type_json(),
user_agent("text2"),
set_cookies(COOKIE1="value1", COOKIE2="value2),
verbose())
result <- content(response)
print(str(result))
通常,人们会使用 jsonlite
包或 xml2
包(取决于结果类型)进行解析 vs 依赖内置的 httr
解析,因为你可以更好地控制输出。在这种情况下,它是 JSON,所以:
library(jsonlite)
result <- fromJSON(content(response, as="text"))
print(str(result))
没有实时地址,这很难测试,但可以让您开始使用 httr
。
library(httr)
#curl -H "Content-Type:application/json" -X GET 127.0.0.1:8084/clusterpredict/byheaders -v -b "text1" -A "text2"
GET(
"127.0.0.1:8084/clusterpredict/byheaders",
add_headers(
"Content-Type" = "application/json"
),
set_cookies("text1"),
user_agent("text2"),
verbose() #-v
)