2010-05-19 19 views
12

देता है मैं HTTP अनुरोध के लिए प्राधिकरण शीर्षलेख पढ़ने की कोशिश कर रहा हूं (क्योंकि मुझे इसमें कुछ जोड़ने की आवश्यकता है), लेकिन मैं हमेशा हेडर मान के लिए शून्य प्राप्त करता हूं। अन्य शीर्षलेख ठीक काम करते हैं।getRequestProperty ("प्रमाणीकरण") हमेशा शून्य

public void testAuth() throws MalformedURLException, IOException{ 
    URLConnection request = new URL("http://google.com").openConnection(); 
    request.setRequestProperty("Authorization", "MyHeader"); 
    request.setRequestProperty("Stackoverflow", "anotherHeader"); 
    // works fine 
    assertEquals("anotherHeader", request.getRequestProperty("Stackoverflow")); 
    // Auth header returns null 
    assertEquals("MyHeader", request.getRequestProperty("Authorization")); 
} 

क्या मैं कुछ गलत कर रहा हूं? क्या यह एक "सुरक्षा" सुविधा है? क्या यह काम URLConnection के साथ करने का कोई तरीका है, या क्या मुझे किसी अन्य HTTP क्लाइंट लाइब्रेरी का उपयोग करने की आवश्यकता है?

उत्तर

21

जाहिर है, यह एक सुरक्षा "सुविधा" है। URLConnection वास्तव में sun.net.www.protocol.http.HttpURLConnection का एक उदाहरण है। यह परिभाषित करता है getRequestProperty के रूप में:

public String getRequestProperty (String key) { 
     // don't return headers containing security sensitive information 
     if (key != null) { 
      for (int i=0; i < EXCLUDE_HEADERS.length; i++) { 
       if (key.equalsIgnoreCase(EXCLUDE_HEADERS[i])) { 
        return null; 
       } 
      } 
     } 
     return requests.findValue(key); 
    } 

EXCLUDE_HEADERS सरणी के रूप में परिभाषित किया गया है:

// the following http request headers should NOT have their values 
    // returned for security reasons. 
    private static final String[] EXCLUDE_HEADERS = { 
      "Proxy-Authorization", 
      "Authorization" 
    }; 
+1

यह समझाएगा। और यह भी क्यों Google कोड इंजन पर एक ही कोड ठीक काम करता है (जहां वे HttpUrlConnection के अपने कार्यान्वयन का उपयोग करते हैं)। – Thilo

0

क्या आपने URLConnection.addRequestProperty() का उपयोग करने का प्रयास किया है? इस प्रकार मैं HTTP अनुरोध शीर्षलेख जोड़ने के लिए उपयोग करता हूं।

+0

ही परिणाम: अन्य हैडर काम करता है, प्राधिकरण अशक्त रहता – Thilo

+0

आप की तरह 'request.addRequestProperty कुछ (" करने की कोशिश की है प्रमाणीकरण "," बेसिक "+ हैश (" उपयोगकर्ता नाम: पासवर्ड ")); 'जहां' हैश 'स्ट्रिंग का बेस 64 हैश है? देखें कि क्या आपके 'assertEquals' परिणाम लौटाते हैं। –

+0

मैं मूल ऑथ का उपयोग नहीं कर रहा हूं। – Thilo

0

मैं अतिरिक्त निर्भरताओं के बारे में खुश नहीं हूं, लेकिन suggestion to switch to Commons Http के बाद मेरे लिए तत्काल समस्या हल हो गई।

मैं अभी भी जानना चाहता हूं कि समस्या मेरे मूल कोड के साथ क्या थी।

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