2011-06-24 10 views
6

काम नहीं करता है, मैं HTTP का उपयोग कर आईपी कैमरे से एक छवि लाने की कोशिश कर रहा हूं। कैमरा HTTP बुनियादी प्रमाणीकरण की आवश्यकता है, तो मैं इसी अनुरोध हेडर जोड़ने के लिए:किसी URL ऑब्जेक्ट में कस्टम HTTP अनुरोध शीर्षलेख सेट करना

URL url = new URL("http://myipcam/snapshot.jpg"); 
URLConnection uc = url.openConnection(); 
uc.setRequestProperty("Authorization", 
    "Basic " + new String(Base64.encode("user:pass".getBytes()))); 

// outputs "null" 
System.out.println(uc.getRequestProperty("Authorization")); 

मैं बाद में ImageIO.read() को url वस्तु गुजर रहा हूँ, और, जैसा कि आप अनुमान लगा सकते हैं, मैं एक HTTP 401 अनधिकृत हो रही है, हालांकि user और pass सही हैं।

मैं क्या गलत कर रहा हूं?

मैंने new URL("http://user:[email protected]/snapshot.jpg") भी कोशिश की है, लेकिन यह या तो काम नहीं करता है।

उत्तर

1

समस्या हल हो गई। यह काम नहीं करता क्योंकि मैं url से ImageIO.read() पास कर रहा था।

इसके बजाय, uc.getInputStream() पास करने से यह काम कर रहा है।

3

वर्ग sun.net.www.protocol.http.HttpURLConnection, जो java.net.HttpURLConnection फैली हुई है, निम्न विधि getRequestProperty(String key) में null वापस जाने के लिए जब सुरक्षा संवेदनशील जानकारी का अनुरोध ओवरराइड की गई थी।

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

है यही कारण है कि आप uc.getRequestProperty("Authorization") पर एक null आ रही है:

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 के लिए घोषणा है। क्या आपने अपाचे से HttpClient का उपयोग करने का प्रयास किया है?

+0

धन्यवाद, अब मैं 'शून्य' पाने का कारण समझता हूं। लेकिन यह HTTP 401 क्यों लौटाता है? क्या यह संभव है कि "प्राधिकरण" संपत्ति बिल्कुल सेट न हो? –

+0

@ ब्लागोवेस्ट Buyukliev, अगर 'uc HttpURLConnection' बढ़ाता है तो उसे 'HttpURLConnection' पर टाइप करें और' getErrorStream() 'को कॉल करके त्रुटि के' इनपुटस्ट्रीम 'प्राप्त करें। इसमें HTTP 401 त्रुटि का संदेश शामिल है। इसके अलावा, मैं आपकी मदद नहीं कर सकता। –

0

क्या आपने URLConnection या HttpURLConnection उपclass करने की कोशिश की है और getRequestProperty() विधि को ओवरराइड किया है?

+0

मैंने 'HttpURLConnection uc = (HttpURLConnection) url.openConnection()' की कोशिश की, लेकिन परिणाम वही है। मेरी समस्या वास्तव में 'getRequestProperty' के साथ नहीं है, लेकिन असंतोष प्राधिकरण शीर्षलेख के साथ। –

+0

तो शायद 'openConnection' विधि को ओवरराइड करें? –

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

  • कोई संबंधित समस्या नहीं^_^