Что будет эквивалентным 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
)
Другие вопросы по тегам