¿Cómo uso las cookies con RCurl?

Intento escribir un paquete R que acceda a algunos datos a través de una API REST. La API, sin embargo, no usa la autenticación http, sino que confía en las cookies para conservar las credenciales con la sesión.

Esencialmente, me gustaría reemplazar las dos líneas siguientes de un script bash con dos funciones R: una para realizar el inicio de sesión, y almacenar la cookie de sesión, y la segunda para OBTENER los datos.

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 

Claramente no entiendo cómo funciona RCurl con las opciones de rizos. Mi guión, tal como está, tiene:

 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) 

El getURL() final getURL() falla con un “No iniciado sesión”. mensaje del servidor, y después del postForm() no existe el archivo cookies.txt .

En general, no es necesario crear un archivo de cookies, a menos que desee estudiar las cookies.

Ante esto, en términos reales, los servidores web usan datos de agentes, redireccionamiento y datos ocultos de publicaciones, pero esto debería ayudar:

 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() 

Importante

A menudo puede haber datos ocultos, más allá del nombre de usuario y la contraseña. Para capturarlo, puede querer, por ejemplo, en Chrome, usar las Developer tools ( Ctrl Shift I ) -> Network Tab , para mostrar los nombres y valores de los campos de publicación.

Mi error. Neal Richter me señaló http://www.omegahat.org/RCurl/RCurlJSS.pdf , que explica mejor la diferencia entre cookiefile y cookiejar . El script de muestra en la pregunta realmente funciona. Pero solo escribe el archivo en el disco cuando ya no se usa.