2012-11-09 18 views
7

मैं अपाचे httpclietn-4.2.2 का उपयोग करके 'सेट कुकी' शीर्षलेख प्राप्त करने की कोशिश कर रहा हूं और कुछ समस्याएं हैं। Firebug में"सेट-कुकी" शीर्षलेख प्राप्त करना

हैडर:

Set-Cookie remixreg_sid=deleted; expires=Thu, 10-Nov-2011 04:32:30 GMT; path=/; 
domain=.vk.com remixapi_sid=deleted; expires=Thu, 10-Nov-2011 04:32:30 GMT; path=/; 
domain=.vk.com remixrec_sid=deleted; expires=Thu, 10-Nov-2011 04:32:30 GMT; path=/; 
domain=.vk.com remixsid=0000000000000000000000000000000000000000000000000000; expires=Mon, 04-Nov-2013 16:10:24 GMT; path=/; domain=.vk.com 

मैं इसे कैसे प्राप्त करने के लिए कोशिश कर रहा हूँ:

//location is a header with url I need to do GET request to 
Header location = response.getFirstHeader("Location"); 
HttpGet httpGet = new HttpGet(location.getValue()); 
httpClient.getParams().setParameter(
//tried to use different policies 
ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2965); 
Header [] allHeaders=response.getAllHeaders(); 

allHeaders "कुकी सेट" को छोड़कर मैं सभी हेडर है में। और मैं इस तरह चेतावनी है:

WARNING: Invalid cookie header: "Set-Cookie: remixlang=0; expires=Mon, 18-Nov-2013 
03:21:47 GMT; path=/; domain=.vk.com". Unrecognized cookie header 'Set-Cookie: 
remixlang=0; expires=Mon, 18-Nov-2013 03:21:47 GMT; path=/; domain=.vk.com' 
Nov 09, 2012 4:31:41 AM org.apache.http.client.protocol.ResponseProcessCookies 
processCookies 

तो मुझे लगता है समस्या 'समाप्त हो रहा है' की तारीख के साथ है।

मैं करने की कोशिश की क्या:

1) Invalid cookie header : Unable to parse expires attribute when expires attribute is empty बनाया कस्टम CookieSpec और इसका इस्तेमाल करने की कोशिश की:

httpClient.getParams().setParameter(CookieSpecPNames.DATE_PATTERNS, Arrays.asList("EEE, dd-MMM-yyyy HH:mm:ss z")); 
:

httpClient.getCookieSpecs().register("vkCookie", new CookieSpecFactory() { 
    public CookieSpec newInstance(HttpParams params){ 
     return new VkCookieSpec(); 
     } 
    }); 
HttpClientParams.setCookiePolicy(httpClient.getParams(), "vkCookie"); 

2) httpclient पैरामीटर में डेटा स्वरूप सेट करने की कोशिश

लेकिन मुझे अभी भी यह चेतावनी मिल रही है। किसी भी मदद की सराहना करेंगे।

उत्तर

5
  • आप आरएफसी 2965 स्वीकार केवल 'सेट-Cookie2' जबकि हेडर, 'सेट-कुकी' शीर्षक आरएफसी 2965 अनुरूप कल्पना के साथ पार्स करने के लिए कोशिश कर रहे हैं।

  • प्रश्न में कुकी विकृत है। इसमें गैर मानक 'समाप्ति' विशेषता शामिल है, जो मामलों को और भी खराब बनाने के लिए, उद्धरण चिह्नों को बगैर एक आरक्षित चरित्र (अल्पविराम) शामिल करता है। हालांकि, यह एक बहुत ही आम प्रोटोकॉल उल्लंघन है, HttpClient 'best_match', 'browser_compatibility' या 'netscape_draft' नीतियों का उपयोग करके इस कुकी को पार्स करने में सक्षम होना चाहिए।

वास्तव में, एक हमेशा 'best_match' नीति का उपयोग करना चाहिए और HttpClient सर्वश्रेष्ठ मिलान कुकी हेडर की संरचना के आधार पर नीति को लेने दें।

+0

उत्तर के लिए धन्यवाद। मैंने उपलब्ध सभी नीतियों का उपयोग करने की कोशिश की। जब मैं सबसे अच्छा मिलान, browser_compatibility या netscape_draft का उपयोग करता हूं, तो responce में कोई सेट-कुकी शीर्षलेख नहीं है और कोई चेतावनी दिखाई नहीं दे रही है। प्रतिक्रिया में कोई सेट-कुकी शीर्षलेख नहीं होने पर – pomkine

+0

@pomkine, आप एचटीपी क्लाइंट को पार्स करने में सक्षम होने की अपेक्षा कैसे करते हैं? – oleg

+0

ओह, क्षमा करें। मेरा मतलब है कि प्रतिक्रिया द्वारा वापस सेट-कुकी हेडर नहीं हैं .getAllHeaders()। – pomkine

3

मुझे पता है कि यह एक पुराना सवाल है। लेकिन मैं एक ही समस्या थी और बस इसे हल करने के लिए अपने टुकड़ा पोस्ट करने के लिए, विशेष रूप से स्थापित करने में स्पष्ट रूप से (विवरण के लिए spec on apache commons देखें) CookieSpecs.STANDARD चाहता था:

 RequestConfig globalConfig = RequestConfig.custom() 
       .setCookieSpec(CookieSpecs.DEFAULT) 
       .build(); 
     CloseableHttpClient httpClient = HttpClients.custom() 
       .setDefaultRequestConfig(globalConfig) 
       .build(); 
     RequestConfig localConfig = RequestConfig.copy(globalConfig) 
       .setCookieSpec(CookieSpecs.STANDARD) 
       .build(); 
     HttpGet httpGet = new HttpGet(url); 
     httpGet.setConfig(localConfig); 

     // Request 
     CloseableHttpResponse response = httpClient.execute(httpGet); 

आशा इस मदद करता है।

संबंधित मुद्दे