2011-03-24 15 views
12

He estado usando readLines() para raspar información de un sitio web en un tutorial de R. Ahora deseo extraer datos de mi propio sitio web (específicamente los datos de awstats), sin embargo, el dominio está protegido por contraseña.Leyendo información de un sitio protegido con contraseña

¿Hay alguna manera de que pueda pasar la url para los datos awstats específicos que requiero con un nombre de usuario y contraseña?

el formato de la URL es:

http://domain.name:port/awstats.pl?month=02&year=2011&config=domain.name&lang=en&framename=mainright&output=alldomains

Gracias.

+0

¿se trata de una autenticación básica http? Es decir, obtiene un mensaje de contraseña en una ventana emergente, y posiblemente un error 401 no autorizado al ingresar la contraseña incorrecta – Martin

Respuesta

6

Si es de hecho una autenticación de acceso básico http, la documentación sobre connections proporciona un poco de ayuda:

URL

Tenga en cuenta que https: // conexiones se sólo se admiten si --internet2 o setInternet2 (TRUE) se usó (para hacer uso de las funciones internas de Internet Explorer), y solo si el certificado es considerado válido. Con esa opción solamente, la notación http://user:[email protected] para los sitios que requieren la autenticación también se acepta.

Así que su cadena URL debe tener este aspecto:

http://username:[email protected]:port/awstats.pl?month=02&year=2011&config=domain.name&lang=en&framename=mainright&output=alldomains

Esto podría ser sólo para Windows sin embargo.

Espero que esto ayude!

+0

Sweet, la opción --internet2 fue el truco. Gracias. – John

5

puede incrustar el nombre de usuario y contraseña en la url como:

http://userid:[email protected]:port/ ...

Esto se puede tratar de utilizar con readLines(). Si eso no funciona, siempre se puede intentar una solución utilizando url() para abrir la conexión:

zz <- url("http://userid:[email protected]:port/...") 
readLines(zz) 
close(zz) 

También puede descargar el archivo y guardarlo en algún lugar usando download.file()

download.file("theurl","/path/to/file/filename",method="wget") 

Esto guarda el archivo en la ruta local que se especifica.

EDIT:

como csgillespie Dicho esto, no debe incluir su nombre de usuario y contraseña en el guión.Si ejecuta scripts con la fuente() o de forma interactiva, por ejemplo, se podría añadir:

user <- readline("Give the username : ") 
passw <- readline("Give the password : ") 

Url <- paste("http://",user,":",passw,"@domain.name...") 
readLines(Url,...) 

Cuando se ejecuta desde la línea de comandos, usted podría pasar los argumentos después --args y acceder a ellos usando commandArgs (ver ?commandArgs)

3

Si tiene acceso al cuadro, siempre puede leer los archivos de registro awstats. Si puede ingresar al cuadro, puede sincronizar fácilmente el último archivo usando rsync.

El ligero inconveniente con el uso de

http://username:[email protected] 

es que usted está poniendo su contraseña en una secuencia de comandos R - la mejor manera de evitar esto. Por supuesto, puedes asegurar el script, pero solo se necesita un desliz. Por ejemplo,

+0

+1 para la advertencia. Por supuesto, uno debe construir la url después de pedir el nombre de usuario y la contraseña usando, por ejemplo, readline() o pasándolo como un parámetro para la secuencia de comandos. Pero el "si tiene acceso a la caja" requiere una solución desde el exterior R. –

+0

@Joris: "solución desde fuera R" - estoy seguro de que R debe tener una biblioteca para 'ssh';) sospecho que el OP puede tener acceso a la caja desde la forma en que se construye la URL de ejemplo, pero eso es solo una suposición. – csgillespie

+0

no es tan sencillo hacerlo, y depende bastante de la arquitectura de la máquina y el servidor involucrados. La única forma en que lo he visto suceder es usando 'system()' en el script R, pero eso está lejos de ser una solución óptima, ya que, de nuevo, tienes problemas con las contraseñas ... –

2

Formateo de la URL como http://username:[email protected] para su uso con download.file no funcionó para mí, pero R.utils proporciona la función downloadFile que funciona perfectamente:

require(R.utils) 
downloadFile(myurl, myfile, username = "myusername", password ="mypassword") 

Consulte la respuesta de @ joris-meys para saber cómo evitar incluir su nombre de usuario y contraseña en texto sin formato en su secuencia de comandos.

EDIT Excepto que parece que downloadFile solo reformatea la URL a http://username:[email protected]? Hmm ...

Cuestiones relacionadas