java php html web-scraping jsoup

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")