Jsoup Cookies para raspado HTTPS

Estoy experimentando con este sitio para reunir mi nombre de usuario en la página de bienvenida para aprender Jsoup y Android. Usando el siguiente código

Connection.Response res = Jsoup.connect("http://www.mikeportnoy.com/forum/login.aspx") .data("ctl00$ContentPlaceHolder1$ctl00$Login1$UserName", "username", "ctl00$ContentPlaceHolder1$ctl00$Login1$Password", "password") .method(Method.POST) .execute(); String sessionId = res.cookie(".ASPXAUTH"); Document doc2 = Jsoup.connect("http://www.mikeportnoy.com/forum/default.aspx") .cookie(".ASPXAUTH", sessionId) .get(); 

Mi cookie (.ASPXAUTH) siempre termina en NULL. Si elimino esta cookie en un navegador web, pierdo mi conexión. Así que estoy seguro de que es la cookie correcta. Además, si cambio el código

 .cookie(".ASPXAUTH", "jkaldfjjfasldjf") Using the correct values of course 

Puedo borrar mi nombre de usuario desde esta página. Esto también me hace pensar que tengo la cookie correcta. Entonces, ¿cómo es que mi cookie aparece nula? ¿Son incorrectos mis campos de nombre de usuario y contraseña? ¿Algo más?

Gracias.

Sé que estoy un poco tarde por 10 meses aquí. Pero una buena opción con Jsoup es usar esta pieza fácil de código:

 //This will get you the response. Response res = Jsoup .connect("url") .data("loginField", "login@login.com", "passField", "pass1234") .method(Method.POST) .execute(); //This will get you cookies Map cookies = res.cookies(); //And this is the easieste way I've found to remain in session Documente doc = Jsoup.connect("url").cookies(cookies).get(); 

Aunque sigo teniendo problemas de conexión con ALGUNOS sitios web, me conecto a muchos de ellos con la misma pieza básica de código. Ah, y antes de que me olvide … Lo que pensé que era mi problema, son los certificados SSL. Tienes que gestionarlos adecuadamente de una forma que todavía no he descifrado.

Siempre hago esto en dos pasos (como humano normal),

  1. Lea la página de inicio de sesión (por GET, lea las cookies)
  2. Enviar formulario y cookies (por POST, sin manipulación de cookies)

Ejemplo:

 Connection.Response response = Jsoup.connect("http://www.mikeportnoy.com/forum/login.aspx") .method(Connection.Method.GET) .execute(); response = Jsoup.connect("http://www.mikeportnoy.com/forum/login.aspx") .data("ctl00$ContentPlaceHolder1$ctl00$Login1$UserName", "username") .data("ctl00$ContentPlaceHolder1$ctl00$Login1$Password", "password") .cookies(response.cookies()) .method(Connection.Method.POST) .execute(); Document homePage = Jsoup.connect("http://www.mikeportnoy.com/forum/default.aspx") .cookies(response.cookies()) .get(); 

Y siempre configure las cookies desde la previa solicitud hasta la siguiente

  .cookies(response.cookies()) 

SSL no es importante aquí. Si tiene problemas con certifcates, ejecute este método para ignorar SSL.

 public static void trustEveryone() { try { HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, new X509TrustManager[]{new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); } catch (Exception e) { // should never happen e.printStackTrace(); } } 

¿Qué pasa si intenta obtener y pasar todas las cookies sin asumir algo como esto? Enviar solicitud POST con nombre de usuario y contraseña y guardar la cookie de sesión

Si todavía tiene problemas, intente investigar esto: Problemas con el paso de cookies a la solicitud GET (después del POST)