我在curl
中有这样的请求
curl -H "Content-Type:application/json" \
-X GET 127.0.0.1:8084/clusterpredict/byheaders \
-v \
-b "text1" \
-A "text2"
如何在R中的RCurl
或httr
库中执行相同的操作?
答案 0 :(得分:5)
在httr
:
-A
/ --user-agent
转换为user_agent()
-b
/ --cookie
会转换为set_cookies()
,但您需要读取Cookie文件并将其设置为对其进行调用(RCurl
具有结构读取存储的cookie文件)。我之所以做出这样的假设,是因为您在"COOKIE1=1; COOKIE2=b"
之后没有使用-b
格式。您也可以在set_cookies()
中单独设置-H
/ --header
转换为add_headers()
,但设置内容类型有特殊功能(见下文)-v
/ --verbose
转换为verbose()
-X
/ --request
转换为实际的VERB
函数(在本例中为GET()
)以下是将Cookie读入文件以便在set_cookie()
中使用的一种方法(如果您确实使用了Cookie jar):
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
包(取决于结果类型)进行解析而不依赖于内置的httr
解析,因为您可以控制输出更好。在这种情况下,它是JSON,所以:
library(jsonlite)
result <- fromJSON(content(response, as="text"))
print(str(result))
答案 1 :(得分:1)
如果没有实时地址,这很难测试,但这里有一些内容可以帮助您开始使用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
)