我有一个请求,在curl这样的
curl -H "Content-Type:application/json" \
-X GET 127.0.0.1:8084/clusterpredict/byheaders \
-v \
-b "text1" \
-A "text2"
Run Code Online (Sandbox Code Playgroud)
如何在R中执行相同的操作RCurl或httr在R中执行相同的操作?
在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)
Run Code Online (Sandbox Code Playgroud)
因此,您的示例将转换httr为:
GET("http://127.0.0.1:8084/clusterpredict/byheaders",
content_type_json(),
user_agent("text2"),
set_cookies(.cookies=crumbs),
verbose())
Run Code Online (Sandbox Code Playgroud)
如果您有个人cookie与cookie jar:
GET("http://127.0.0.1:8084/clusterpredict/byheaders",
content_type_json(),
user_agent("text2"),
set_cookies(COOKIE1="value1", COOKIE2="value2),
verbose())
Run Code Online (Sandbox Code Playgroud)
注意,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))
Run Code Online (Sandbox Code Playgroud)
通常,可以使用jsonlite包或xml2包(取决于结果类型)来进行解析,而不是依赖于内置httr解析,因为您可以更好地控制输出.在这种情况下,它是JSON,所以:
library(jsonlite)
result <- fromJSON(content(response, as="text"))
print(str(result))
Run Code Online (Sandbox Code Playgroud)