2011-08-21 37 views
12

Tôi đang thử nghiệm với trang web này để thu thập tên người dùng của tôi trên trang chào mừng để tìm hiểu Jsoup và Android. Sử dụng mã sau đâyCookie Jsoup để xóa HTTPS

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 của tôi (.ASPXAUTH) luôn kết thúc NULL. Nếu tôi xóa cookie này trong trình duyệt web, tôi sẽ mất kết nối. Vì vậy, tôi chắc chắn đó là cookie chính xác. Ngoài ra, nếu tôi thay đổi mã

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

Tôi có thể xóa tên đăng nhập của mình khỏi trang này. Điều này cũng khiến tôi nghĩ rằng tôi có đúng cookie. Vì vậy, làm thế nào đến cookie của tôi đi lên Null? Các trường tên người dùng và mật khẩu của tôi có đúng không? Thứ gì khác?

Cảm ơn.

Trả lời

0

gì nếu bạn cố gắng lấy và đi qua tất cả các cookie mà không giả định bất cứ điều gì như thế này: Sending POST request with username and password and save session cookie

Nếu bạn vẫn gặp vấn đề cố gắng nhìn vào như thế này: Issues with passing cookies to GET request (after POST)

+1

Tôi đã thử liên kết đầu tiên và có thể lấy lại ba cookie nhưng một ô trống. Cookie tôi cần không có ở đó, điều này giải thích tại sao tôi luôn nhận được NULL. Tôi không thể hiểu tại sao mã của tôi không trả lại tất cả các cookie tôi thấy trong firebug. Có điều gì tôi có thể tìm kiếm không? – Brian

28

Tôi biết tôi khá muộn bởi 10 tháng đây. Nhưng một lựa chọn tốt sử dụng Jsoup là sử dụng này mảnh Peasy dễ dàng mã:

//This will get you the response. 
Response res = Jsoup 
    .connect("url") 
    .data("loginField", "[email protected]", "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(); 

Mặc dù tôi vẫn đang gặp rắc rối liên quan đến một số trang web, tôi kết nối với một toàn bộ rất nhiều trong số họ với mảnh cơ bản cùng một đoạn mã . Oh, và trước khi tôi quên ... Những gì tôi thấy vấn đề của tôi là, là giấy chứng nhận SSL. Bạn phải quản lý đúng cách theo cách mà tôi vẫn chưa tìm ra được.

9

tôi luôn luôn làm điều này trong hai bước (như con người bình thường),

  1. trang đăng nhập Read (bởi GET, đọc cookie)
  2. Gửi hình thức và cookie (qua đường bưu điện, mà không cần thao tác cookie)

Ví dụ:

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

Và luôn đặt cookie từ previuos yêu cầu tiếp theo sử dụng

  .cookies(response.cookies()) 

SSL không quan trọng ở đây. Nếu bạn có vấn đề với certifcates sau đó thực hiện phương pháp này để bỏ qua 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(); 
    } 
} 
Các vấn đề liên quan