2009-09-21 23 views
8

Tôi đang cố thực hiện yêu cầu đến trang web yêu cầu cookie. Tôi đang sử dụng HTTPUrlConnection, nhưng phản hồi luôn quay lại nói rằngCookie bị tắt với Java URLConnection

<div class="body"><p>Your browser's cookie functionality is turned off. Please turn it on. 

Làm cách nào để yêu cầu máy chủ được truy vấn cho rằng tôi đã bật cookie. Mã của tôi đi một cái gì đó như thế này.

private String readPage(String page) throws MalformedURLException { 
    try { 
     URL url = new URL(page); 
     HttpURLConnection uc = (HttpURLConnection) url.openConnection(); 
     uc.connect(); 

     InputStream in = uc.getInputStream(); 
     int v; 
     while((v = in.read()) != -1){ 
      sb.append((char)v); 
     } 
     in.close(); 
     uc.disconnect(); 
    } catch (IOException e){ 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 

Trả lời

10

Bạn cần phải thêm một CookieHandler với hệ thống cho nó xử lý cookie. Trước Java 6, không có triển khai CookieHandler trong JRE, bạn phải viết của riêng bạn. Nếu bạn đang sử dụng Java 6, bạn có thể thực hiện việc này,

CookieHandler.setDefault(new CookieManager()); 

Xử lý cookie của URLConnection thực sự yếu. Nó hầu như không hoạt động. Nó không xử lý tất cả các quy tắc cookie một cách chính xác. Bạn nên sử dụng Apache HttpClient nếu bạn đang xử lý các cookie nhạy cảm như xác thực.

+0

bây giờ tôi cần tìm ra cách thực hiện xác thực proxy http. tôi đã làm việc với URLConnection, nhưng bây giờ tôi cần tìm ra nó ở đây. tsok, google sẽ hoàn toàn tìm thấy một cái gì đó cho tôi;) cảm ơn! – dharga

1
uc.getHeaderFields() 
// get cookie (set-cookie) here 

URLConnection conn = url.openConnection(); 
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2"); 
conn.addRequestProperty("Referer", "http://xxxx"); 
conn.addRequestProperty("Cookie", "..."); 
-4

Nếu bạn đang cố gắng loại bỏ khối lượng lớn dữ liệu sau khi đăng nhập, bạn thậm chí có thể tốt hơn với một trình duyệt web scripted như WebHarvest (http://web-harvest.sourceforge.net/) Tôi đã sử dụng nó để thành công lớn trong một số dự án của riêng tôi.

2

Tôi nghĩ rằng máy chủ không thể xác định được yêu cầu đầu tiên mà khách hàng không hỗ trợ cookie. Vì vậy, có thể máy chủ gửi chuyển hướng. Hãy thử tắt chuyển hướng:

uc.setInstanceFollowRedirects(false); 

Sau đó, bạn sẽ có thể nhận cookie để phản hồi và sử dụng chúng (nếu bạn cần) trong yêu cầu tiếp theo.

Các vấn đề liên quan