java - Problemas al enviar un formulario de inicio de sesión con Jsoup
php html (1)
Por alguna razón, este código no me permite ingresar al sitio web cuando uso la información de inicio de sesión correcta.
System.out.println
publica el código de la página de inicio de sesión, lo que indica que mi código no funcionó.
¿Alguien puede decirme qué olvido o qué tiene de malo?
public void connect() {
try {
Connection.Response loginForm = Jsoup.connect("https://www.capitaliq.com/CIQDotNet/Login.aspx/login.php")
.method(Connection.Method.GET)
.execute();
org.jsoup.nodes.Document document = Jsoup.connect("https://www.capitaliq.com/CIQDotNet/Login.aspx/authentication.php")
.data("cookieexists", "false")
.data("username", "myUsername")
.data("password", "myPassword")
.cookies(loginForm.cookies())
.post();
System.out.println(document);
} catch (IOException ex) {
Logger.getLogger(WebCrawler.class.getName()).log(Level.SEVERE, null, ex);
}
}
Además del
username
, la
password
y las
cookies
, el sitio requiere dos valores adicionales para el inicio de sesión:
VIEWSTATE
y
EVENTVALIDATION
.
Puede obtenerlos de la respuesta de la primera solicitud
Get
, como esta:
Document doc = loginForm.parse();
Element e = doc.select("input[id=__VIEWSTATE]").first();
String viewState = e.attr("value");
e = doc.select("input[id=__EVENTVALIDATION]").first();
String eventValidation = e.attr("value");
Y agréguelo después de la
password
(el orden realmente no importa):
org.jsoup.nodes.Document document = (org.jsoup.nodes.Document) Jsoup.connect("https://www.capitaliq.com/CIQDotNet/Login.aspx/authentication.php").userAgent("Mozilla/5.0")
.data("myLogin$myUsername", "MyUsername")
.data("myLogin$myPassword, "MyPassword")
.data("myLogin$myLoginButton.x", "22")
.data("myLogin$myLoginButton.y", "8")
.data("__VIEWSTATE", viewState)
.data("__EVENTVALIDATION", eventValidation)
.cookies(loginForm.cookies())
.post();
También agregaría el campo
userAgent
a ambas solicitudes: algunos sitios lo prueban y envían diferentes páginas a diferentes clientes, por lo que si desea obtener la misma respuesta que obtiene con su navegador, agregue a las solicitudes
.userAgent("Mozilla/5.0")
(o cualquier navegador que esté usando).
Editar
El nombre de campo del nombre de
myLogin$myUsername
es
myLogin$myUsername
, la contraseña es
myLogin$myPassword
y la solicitud de
Post
también contiene datos sobre el botón de inicio de sesión.
No puedo probarlo, porque no tengo usuario en ese sitio, pero creo que funcionará.
Espero que esto resuelva tu problema.
EDITAR 2
Para habilitar el campo
remember me
durante el inicio de sesión, agregue esta línea a la solicitud de
post
:
.data("myLogin$myEnableAutoLogin", "on")