2012-05-07 13 views
13

मैं एक एचटीटीपीएस साइट तक पहुंचने के लिए जावा का उपयोग कर रहा हूं जो एक्सएमएल प्रारूप में डिस्प्ले देता है। मैं यूआरएल में लॉगिन प्रमाण-पत्र पास करता हूं।सर्वर ने HTTP प्रतिक्रिया कोड लौटाया: यूआरएल के लिए 401: https

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
requestURL = "https://Administrator:[email protected]:8443/abcd"; 

try { 
     InputStream is = null; 
     URL url = new URL(requestURL); 
     InputStream xmlInputStream =new URL(requestURL).openConnection().getInputStream(); 
     byte[] testByteArr = new byte[xmlInputStream.available()]; 
     xmlInputStream.read(testByteArr); 
     System.out.println(new String(testByteArr)); 
     Document doc = db.parse(xmlInputStream); 
     System.out.println("DOC="+doc); 
    } catch (MalformedURLException e) { 
    } 

मैं प्रोग्राम है जो मान्य नहीं है पर हस्ताक्षर किए/अहस्ताक्षरित प्रमाण पत्र में एक ट्रस्ट प्रबंधक बना रहा हूं: यहाँ कोड का टुकड़ा है। लेकिन, इसके बाद के संस्करण कार्यक्रम चलाने पर, मैं त्रुटि सर्वर HTTP प्रतिक्रिया कोड लौटे मिलती है: 401 URL के लिए: https://Administrator:[email protected]:8443/abcd

मैं अपने ब्राउज़र पर एक ही यूआरएल का उपयोग कर सकते हैं और इसे सही ढंग से एक्सएमएल प्रदर्शित करता है। कृपया मुझे बताएं कि जावा प्रोग्राम के भीतर यह काम कैसे करें।

उत्तर

24

401 "अनधिकृत" का अर्थ है, इसलिए कि आपके क्रेडेंशियल में कुछ किया जाना चाहिए।

मुझे लगता है कि जावा URL आपके द्वारा दिखाए जा रहे वाक्यविन्यास का समर्थन नहीं करता है। आप इसके बजाए एक प्रमाणीकरणकर्ता का उपयोग कर सकते हैं।

Authenticator.setDefault(new Authenticator() { 

    @Override 
    protected PasswordAuthentication getPasswordAuthentication() {   
     return new PasswordAuthentication(login, password.toCharArray()); 
    } 
}); 

और फिर क्रेडेंशियल के बिना नियमित यूआरएल का आह्वान करते हैं।

अन्य विकल्प के लिए एक हैडर में साख प्रदान करना है:

String loginPassword = login+ ":" + password; 
String encoded = new sun.misc.BASE64Encoder().encode (loginPassword.getBytes()); 
URLConnection conn = url.openConnection(); 
conn.setRequestProperty ("Authorization", "Basic " + encoded); 

पुनश्च: यह है कि Base64Encoder उपयोग करने के लिए अनुशंसित नहीं है लेकिन यह केवल एक त्वरित समाधान को दिखाने के लिए है। यदि आप उस समाधान को रखना चाहते हैं, तो लाइब्रेरी की तलाश करें। वहां बहुत सारे हैं।

+1

धन्यवाद Guillaume Polet आयात करते हैं। दूसरा विकल्प एक आकर्षण की तरह काम किया। मुझे केवल आंतरिक परीक्षण के लिए इसकी आवश्यकता है, इसलिए मुझे लगता है कि यह पर्याप्त हो सकता है। – Vish

+1

धन्यवाद पोलेट। दूसरे विकल्प ने मेरी मदद की। –

1

इसे आजमाएं। सर्वर को एक मान्य उपयोगकर्ता को जानने के लिए आपको प्रमाणीकरण पास करने की आवश्यकता है। आपको इन दो पैकेजों को आयात करने की आवश्यकता है और इसमें एक जर्सी जार शामिल करना होगा। आप jersy जार शामिल करना चाहते हैं न तो इस पैकेज

import sun.misc.BASE64Encoder; 

import com.sun.jersey.core.util.Base64; 
import sun.net.www.protocol.http.HttpURLConnection; 

और फिर,

String encodedAuthorizedUser = getAuthantication("username", "password"); 
URL url = new URL("Your Valid Jira URL"); 
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 
httpCon.setRequestProperty ("Authorization", "Basic " + encodedAuthorizedUser); 

public String getAuthantication(String username, String password) { 
    String auth = new String(Base64.encode(username + ":" + password)); 
    return auth; 
}