2011-09-18 17 views
19

Tôi đang sử dụng phiên bản mới nhất của HttpClient (4.x). Và ngay bây giờ tôi đang cố gắng thực hiện yêu cầu GET. Tôi vừa đăng yêu cầu Nhận.HttpClient CẢNH BÁO: Cookie bị từ chối: Thuộc tính tên miền bất hợp pháp

Đây là mã của tôi;

public class Poster { 

    static boolean routing1 = true, routing2 = true; 
    static int counter1 = 0, counter2 = 0; 
    DefaultHttpClient oHtp = null; 
    HttpGet oHGet = null; 
    HttpResponse oHRes = null; 


    private void test(String fullAddress) throws Exception { 
     oHtp = new DefaultHttpClient(); 
     oHGet = new HttpGet(fullAddress); 

     HttpResponse response = oHtp.execute(oHGet); 
     System.out.print(response.getStatusLine()); 

     HttpEntity entity = response.getEntity(); 
     if (entity != null) { 
      entity = new BufferedHttpEntity(entity); 
      // System.out.println(EntityUtils.toString(entity)); 
      System.out.print("\t entity is retrieved... "); 
     } 


     oHtp.getConnectionManager().shutdown(); 
    } 
} 

Tôi chỉ thực hiện nó độc đáo. Đầu tiên là

new Poster().test("http://123.xl.co.id/profile.php"); 

và thứ hai là

new Poster().test("http://goklik.co.id/"); 

ya, Và Chỉ có một lần thứ hai .... Tôi đã nhận này Thông báo lỗi;

ngày 18 tháng 9 năm 2011 10:11:30 org.apache.http.client.protocol.ResponseProcessCookies processCookies CẢNH BÁO: Cookie từ chối: "[phiên bản: 0] [Tên: CookiePst] [giá trị: 0149 = xwGHF7HYDHLHQ84Isp/eSy9vu + Xq6cT12wxg1A ==] [tên miền: .mcore.com] [đường dẫn: /] [hết hạn: Sun Sep 18 10:38:59 ICT 2011] ". Bất hợp pháp thuộc tính tên miền "mcore.com". Tên miền xuất xứ: "goklik.co.id"

Tôi nhận ra rằng Cookie có liên quan ở đây. Nhưng tôi không hiểu ý nghĩa của Cảnh báo. Và tôi cũng không biết cách giải quyết nó (Cookie không bị từ chối). HOpe có một chút ánh sáng để xóa tâm trí của tôi khỏi các bạn ....: D

Trả lời

16

Bạn không thể "sửa" nó. Trang web đang cố gắng đặt cookie không được phép đặt và thư viện ứng dụng khách apache bạn đang sử dụng đang cho bạn biết về nó.

Nó đang cố gắng thiết lập một cookie cho mcore.com khi tên miền là goklik.co.id

+0

hah ?? bạn có chắc chắn về điều đó không?? OMG. tôi nghĩ, từ phía khách hàng (bên cạnh tôi), tôi nên tạo lại cookie của mình trước khi đưa ra một yêu cầu GET khác (đi dọc theo cookie) sử dụng mcore.com thay vì goklik.co.id bắt buộc :( – gumuruh

+0

Bạn đang bằng cách sử dụng một khách hàng phù hợp với các tiêu chuẩn thích hợp.Xem xét các JavaDocs cho 'org.apache.http.client' Tôi không thấy cách ghi đè điều đó (các tùy chọn org.apache.http.client.params.CookiePolicy có sẵn là tất cả tuân thủ các tiêu chuẩn) –

+0

Tôi gặp vấn đề tương tự nhưng tôi đã gửi yêu cầu tới cùng một trang. Ý của bạn là "Trang web đang cố đặt cookie không được phép đặt". Tại sao đây lại là vấn đề? – Jaskey

21

Có thể đó là quá muộn, nhưng tôi đã có cùng một vấn đề và tôi đã tìm thấy một cái gì đó đã giúp tôi làm việc nó ra, chỉ cần đặt các Cookie Policy để Trình duyệt compability:

httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, 
     CookiePolicy.BROWSER_COMPATIBILITY); 

Sau đây là các giá trị có thể:

chính sách Cookie cung cấp liên quản lý cookie tương ứng frace cho một loại hoặc phiên bản cookie nhất định.

Đặc điểm kỹ thuật RFC 2109 được sử dụng theo mặc định.Khác được hỗ trợ đặc điểm kỹ thuật có thể được lựa chọn khi cần thiết hoặc thiết lập mặc định khi mong muốn

Các thông số kỹ thuật sau đây được cung cấp:

  • BROWSER_COMPATIBILITY: phù hợp với thông lệ quản lý cookie thông thường (ngay cả khi họ không phải là 100% tiêu chuẩn phù hợp)
  • NETSCAPE: Netscape dự thảo Cookie compliant
  • RFC_2109: RFC2109 phù hợp (mặc định)
  • IGNORE_COOKIES: không automcatically quá trình cookie
+0

Điều này không có tác dụng đối với tôi, tôi có thể làm gì khác không? –

+6

Tôi gặp vấn đề tương tự nhưng vì tôi không quan tâm đến cookie, tôi đã đặt CookiePolicy. IGNORE_COOKIES và điều đó đã làm cho tôi (với BROWSER_COMPATIBILITY tôi đã giữ nhận được tin nhắn). –

+0

Thông báo này có ý nghĩa gì và ý nghĩa của CookiePolicy.BROWSER_COMPATIBILITY là gì? – Jaskey

10

Trước httpclient 4.3, câu trả lời Jonathan Silva 's là mát mẻ.

Nhưng từhttpclient 4.3, API dường như đã thay đổi rất nhiều, đoạn mã sau sẽ làm việc:

RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY).build(); 
HttpClientBuilder customizedClientBuilder = HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig); 
CloseableHttpClient client = customizedClientBuilder.build(); // customized client, 
0

Tôi đang sử dụng http client 4.5.2 và điều này được thiết lập cookie spec để dễ dàng giải quyết vấn đề của tôi. Ví dụ về cách khách hàng khởi tạo:

httpClient = HttpClients.custom() 
       .setDefaultRequestConfig(RequestConfig.custom() 
         // Waiting for a connection from connection manager 
         .setConnectionRequestTimeout(10000) 
         // Waiting for connection to establish 
         .setConnectTimeout(5000) 
         .setExpectContinueEnabled(false) 
         // Waiting for data 
         .setSocketTimeout(5000) 
         .setCookieSpec("easy") 
         .build()) 
       .setMaxConnPerRoute(20) 
       .setMaxConnTotal(100) 
       .build(); 
0

Chỉ muốn cải thiện câu trả lời của Eric vì câu trả lời không trực tiếp giải quyết kịch bản của tôi nhưng việc thay đổi CookieSpec thành IGNORE_COOKIES giải quyết được sự cố của tôi.

RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build(); 
HttpClientBuilder customizedClientBuilder = 
HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig); 
CloseableHttpClient client = customizedClientBuilder.build(); // customized client, 

Vì trong phiên bản HttpClient 4.5 CookieSpecs.BROWSER_COMPATIBILITY của tôi đã bị khấu hao.

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