Подтвердить что ты не робот

Как использовать файлы cookie с RCURL?

Я пытаюсь написать R-пакет, который обращается к некоторым данным через REST API. Однако API не использует проверку подлинности HTTP, а скорее полагается на файлы cookie, чтобы хранить учетные данные в сеансе.

По сути, я хотел бы заменить следующие две строки из bash script двумя R-функциями: один для выполнения входа в систему и сохранения файла cookie сеанса, а второй для получения данных.

curl -X POST -c cookies.txt -d"username=xxx&password=yyy" http://api.my.url/login
curl         -b cookies.txt                               http://api.my.url/data

Я явно не понимаю, как работает RCURL с параметрами завитки. Мой script как он есть:

library(RCurl)
curl <- getCurlHandle()
curlSetOpt(cookiejar='cookies.txt', curl=curl)
postForm("http://api.my.url/login", username='xxx', password='yyy', curl=curl)
getURL('http://api.my.url/data", curl=curl)

Финал getURL() завершается с ошибкой "Не вошел". сообщение с сервера, и после существования файла postForm() no cookies.txt.

4b9b3361

Ответ 1

В общем, вам не нужно создавать файл cookie, если вы не хотите изучать файлы cookie.

Учитывая это, на самом деле, веб-серверы используют данные агента, перенаправление и скрытые данные, но это должно помочь:

library(RCurl)

#Set your browsing links 
loginurl = "http://api.my.url/login"
dataurl  = "http://api.my.url/data"

#Set user account data and agent
pars=list(
     username="xxx"
     password="yyy"
)
agent="Mozilla/5.0" #or whatever 

#Set RCurl pars
curl = getCurlHandle()
curlSetOpt(cookiejar="cookies.txt",  useragent = agent, followlocation = TRUE, curl=curl)
#Also if you do not need to read the cookies. 
#curlSetOpt(  cookiejar="", useragent = agent, followlocation = TRUE, curl=curl)

#Post login form
html=postForm(loginurl, .params = pars, curl=curl)

#Go wherever you want
html=getURL(dataurl, curl=curl)

#Start parsing your page
matchref=gregexpr("... my regexp ...", html)

#... .... ...

#Clean up. This will also print the cookie file
rm(curl)
gc()

Внимание!

Часто могут отображаться скрытые данные, помимо имени пользователя и пароля. Чтобы захватить его, вы можете захотеть, например. в Chrome используйте Developer tools (Ctrl Shift I) → Network Tab, чтобы показать имена и значения полей.

Ответ 2

Мой плохой. Нил Рихтер указал мне http://www.omegahat.org/RCurl/RCurlJSS.pdf - что лучше объясняет разницу между cookiefile и cookiejar. Образец script в вопросе действительно работает. Но он только записывает файл на диск, когда он больше не используется.