example r curl rcurl

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.