用于HTTPS抓取的Jsoup Cookie

我正在试验这个网站,在欢迎页面上收集我的用户名,以学习Jsoup和Android。 使用下面的代码

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(); 

我的cookie(.ASPXAUTH)总是以NULL结尾。 如果我在网页浏览器中删除这个cookie,我会失去联系。 所以我相信这是正确的cookie。 另外,如果我改变了代码

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

我可以从这个页面上删除我的login名。 这也让我觉得我有正确的cookie。 那么,我的cookies怎么来了? 我的用户名和密码名称字段是否有误? 别的东西?

谢谢。

我知道我在这里迟了10个月。 但是使用Jsoup的一个好的select是使用这个简单易懂的代码:

 //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<String, String> cookies = res.cookies(); //And this is the easieste way I've found to remain in session Documente doc = Jsoup.connect("url").cookies(cookies).get(); 

尽pipe我仍然无法连接到一些网站,但我用相同的基本代码连接了很多。 哦,之前,我忘了..我想我的问题是,是SSL证书。 你必须以我还没有弄明白的方式妥善pipe理它们。

我总是这样做两步(像正常的人),

  1. 阅读login页面(通过GET,阅读cookies)
  2. 提交表单和cookie(通过POST,不用cookie操作)

例:

 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(); 

并始终将cookies从previuos请求设置为下次使用

  .cookies(response.cookies()) 

SSL在这里并不重要。 如果您对certifcates有问题,请执行此方法以忽略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(); } } 

如果您尝试获取并传递所有Cookie而不采取任何类似的操作: 使用用户名和密码发送POST请求并保存会话Cookie

如果您仍然遇到问题,请尝试以下方法: 将Cookie传递给GET请求(POST后)

Interesting Posts