这个卷曲请求的R等价物是什么

Mar*_*ski 2 curl r rcurl httr

我有一个请求,在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中执行相同的操作RCurlhttr在R中执行相同的操作?

hrb*_*str 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)
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)