2012-05-28 13 views
5

Tengo un problema .. Quiero descargar a XML algo de información del sitio web (esto sé cómo hacerlo), sé cómo dl información del sitio web, pero el problema es cuando primero necesito iniciar sesión .Java/Scala | Inicie sesión en el sitio web

Su parte del código:

<form method="post" action="logowanie.php"> 
    <table class="center"> 
    <tr> 
    <td><label for="username">Login:</label></td> 
    <td><input type="text" name="username" value=""></td> 
    <td rowspan="2"><div class="submit"><input type="submit" value="OK" name="submit"></div></td> 
    </tr> 
    <tr> 
    <td><label for="password">Hasło:</label></td> 
    <td><input type="password" name="password" value=""></td> 

necesito de alguna forma entran nombre de usuario y pulse el botón Enviar. ¿Alguna idea, ejemplos de código de cómo hacerlo? Muchas gracias.

Lo estoy haciendo en Java/Scala.

+1

¿Cuál es el mecanismo de autenticación en ese sitio? ¿Cookie, digest o algo más? – Rogach

Respuesta

4

Si bien el Apache HttpClient funcionaría, usarlo desde Scala es unidiomático y detallado, y la biblioteca Dispatch proporciona un buen contenedor de Scala que le permite escribir un código mucho más conciso. Se podía utilizar de esta manera:

import dispatch._ 

val u = url("https://site.com/logowanie.php") 
val info = Seq("username" -> "me", "password" -> "secret") 

val client = new Http 
client(u <<info>>> System.out) 

Este ejemplo podría simplemente imprimir la respuesta, pero se puede proporcionar fácilmente formas más sofisticadas de manipulación de la respuesta, y su client ahora tiene las cookies que tienen que seguir interactuando con el sitio .

Aquí hay un ejemplo más complejo que he utilizado para iniciar sesión en un sistema que me obligó a recoger un identificador generado a partir de la forma antes de iniciar sesión:

import dispatch._ 
import dispatch.jsoup.JSoupHttp._ 

val u = url("https://myuni.edu/something/login") 
val info = Seq(
    "username" -> "me", 
    "password" -> "secret", 
    "warn"  -> "true", 
    "submit" -> "LOGIN", 
    "execution" -> "e1s1", 
    "_eventId" -> "submit" 
) 

val client = new Http 
val id = client(u </> (_.select("input[name=lt]").first.attr("value"))) 
client(u << info :+ ("lt" -> id) >>> System.out) 

Aquí estoy usando Despacho de JSoup soporte para analizar la página del formulario y extraer el identificador que necesito, que luego puedo agregar a los parámetros del formulario cuando presento la solicitud.

+0

¿Alguna idea de cómo integrarlo con Eclipse? Se ve bien, se ejecutó desde la línea de comandos, pero se preguntaba cómo hacerlo en Eclipse. ¡Gracias! – daaatz

+0

Eso depende de cómo está construyendo el proyecto, etc.-vea [esta respuesta] (http://stackoverflow.com/a/6201089/334519) por ejemplo para más información. Cuando –

+0

im tratando de utilizar este código me sale esto: Descripción de Recursos \t \t Ruta \t \t Localización Tipo valor no es miembro de dispatch.Request \t main.scala \t/default-fa01fe/src/main/Scala \t línea 24 \t Scala Problema – daaatz

Cuestiones relacionadas