example - httr r
¿Cómo uso las cookies con RCurl? (2)
En general, no es necesario crear un archivo de cookies, a menos que desee estudiar las cookies.
Teniendo esto en cuenta, los servidores web utilizan datos de agente, redireccionando y publicando datos ocultos, 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 de publicación ocultos, más allá del nombre de usuario y la contraseña. Para capturarlo, es posible que desee, por ejemplo, en Chrome, usar las Developer tools
( Ctrl Shift I ) -> Network Tab
, para mostrar los nombres y valores de los campos de la publicación.
Estoy intentando escribir un paquete R que accede a algunos datos a través de una API REST. Sin embargo, la API no utiliza la autenticación http, sino que se basa en cookies para mantener las credenciales con la sesión.
Esencialmente, me gustaría reemplazar las siguientes dos líneas 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 rizo. Mi guión en su forma actual 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 final getURL()
falla con un "No se ha iniciado sesión". mensaje del servidor, y después del postForm()
no existe el archivo cookies.txt
.
Mi error. Neal Richter me señaló a mí http://www.omegahat.org/RCurl/RCurlJSS.pdf , lo 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.