用于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理它们。
我总是这样做两步(像正常的人),
- 阅读login页面(通过GET,阅读cookies)
- 提交表单和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后)