Что будет эквивалентным R для этого запроса curl
У меня есть запрос в curl
как это
curl -H "Content-Type:application/json" \
-X GET 127.0.0.1:8084/clusterpredict/byheaders \
-v \
-b "text1" \
-A "text2"
Как я могу выполнить ту же операцию в RCurl
или же httr
библиотека в R?
2 ответа
В 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()
(если вы действительно используете банку с печеньем):
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
сохранит файлы cookie между вызовами одного и того же домена в одном сеансе R, поэтому нет необходимости указывать этот файл или эти явные значения файлов 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))
Без реального адреса это сложно проверить, но вот кое-что, с чего можно начать 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
)