2015-09-23 3 views
2

У меня есть запрос в curl как этотЧто бы R эквивалент этого завитка запрос

curl -H "Content-Type:application/json"    \ 
    -X GET 127.0.0.1:8084/clusterpredict/byheaders \ 
    -v            \ 
    -b "text1"          \ 
    -A "text2" 

Как я могу выполнить ту же операцию в RCurl или httr библиотеке в R?

+0

Я не думаю, что '-b" text1 "' действительно в первую очередь? Вы пытаетесь опубликовать данные или файл cookie? Обратите внимание, что GET обычно не может сочетаться с проводкой данных. Просьба уточнить ваш пример. – Jeroen

+0

@Jeroen попробует прочитать из этого файла jar файла cookie, если в строке нет значения 'key = value'. _ «Если в строке не используется символ« = », он рассматривается как имя файла, которое будет использоваться для чтения ранее сохраненных строк cookie, которые должны использоваться в этом сеансе, если они совпадают». _ – hrbrmstr

ответ

5

В httr:

  • -A/--user-agent переводит user_agent()
  • -b/--cookie переводится set_cookies() но вы должны прочитать в файле печенья и установить их в вызове к нему (RCurl имеет создает для чтения сохраненные файлы cookie). Я делаю это предположение, так как вы не использовали формат "COOKIE1=1; COOKIE2=b" после -b. Вы можете установить их по отдельности в set_cookies() а
  • -H/--header переводится add_headers() но есть специальные функции для установки типа содержимого (см ниже)
  • -v/--verbose переводит verbose()
  • -X/--request переводится фактическим VERB функции (в данном случае GET())

Вот один способ читать куки в файл для использования в(если вы, в самом деле, с помощью куков):

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, поэтому не нужно указывать этот файл или t в последующих вызовах укажите значения 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 пакета (в зависимости от типа результата), чтобы сделать parsing vs полагается на встроенный анализ httr, так как вы можете лучше контролировать вывод. В этом случае это JSON, так:

library(jsonlite) 
result <- fromJSON(content(response, as="text")) 
print(str(result)) 
+0

Спасибо, что работает :) is есть ли способ получить результат этого вопроса? –

+0

Вы думаете, что могли бы помочь? http://stackoverflow.com/questions/34513580/what-would-be-the-r-equivalent-for-such-curl-request –

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 
) 
+0

Потому что мой расширенный пример 'httr' был плохим, а? ;-) – hrbrmstr

+0

@hrbrmstr, мы должны были отвечать одновременно. конечно, ваш гораздо лучше и гораздо более подробно. – timelyportfolio

+0

Я был просто pokin ':-) – hrbrmstr

Смежные вопросы