2011-08-11 16 views
26

HttpUrlConnection का उपयोग कर प्रीपेप्टिव मूल http प्रमाणीकरण का उपयोग करने का सबसे अच्छा तरीका क्या है। (अब के लिए मान लें मैं HttpClient का उपयोग नहीं कर सकता)।HttpUrlConnection के साथ प्रीपेप्टिव बेसिक ऑथ?

स्पष्टीकरण के लिए संपादित करें: मैं बेस 64 एन्कोडिंग का उपयोग कर अनुरोध हेडर में सही ढंग से un/pw सेट कर रहा हूं। क्या कोई अतिरिक्त झंडे या गुण हैं जिन्हें सेट करने की आवश्यकता है, या यह तथ्य है कि मैं प्राथमिक ऑथ हेडर को प्रीपेप्टिव मूल ऑथ के लिए जरूरी अनुरोध के लिए सेट कर रहा हूं?

उत्तर

78
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); 
String encoded = Base64.getEncoder().encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8)); //Java 8 
connection.setRequestProperty("Authorization", "Basic "+encoded); 


फिर कनेक्शन को सामान्य के रूप में उपयोग करें।

byte[] message = (username+":"+password).getBytes("UTF-8"); 
String encoded = javax.xml.bind.DatatypeConverter.printBase64Binary(message); 

हां, यह सब आप मूल का उपयोग करने के क्या करना है:

आप जावा 7 या कम उपयोग कर रहे हैं, तो आप इस तरह के रूप Base64 करने के लिए एक स्ट्रिंग एन्कोड करने के लिए, एक विधि की आवश्यकता होगी प्रमाणीकरण। अनुरोध संपत्ति सेट करने के लिए ऊपर दिया गया कोड कनेक्शन खोलने के तुरंत बाद और इनपुट या आउटपुट स्ट्रीम प्राप्त करने से पहले किया जाना चाहिए।

+0

हां, यह वही है जो मैं अब कर रहा हूं (संपादन देखें)। –

+0

हां, आपको बस इतना करना है। – dontocsata

+0

कूल, धन्यवाद। यह पता चला कि मेरी समस्या कहीं और थी। मुझे पता था कि HttpClient के लिए एक setPreemptiveAuth प्रकार इंटरफ़ेस था, आश्चर्य हुआ कि क्या HttpUrlConnection के लिए कुछ समान था। –

2

संयोग से, यदि कोई और उसी में चलता है, तो एंड्रॉइड समस्या भी मौजूद होती है यदि आप org.apache.commons.codec.binary.Base64 का उपयोग करते हैं और Base64.encodeBase64String() करते हैं। आपको Base64.encodeBase64() करने की आवश्यकता है और बाइट प्राप्त करें [] फिर स्ट्रिंग का निर्माण करें।

यह मुझे पूरी तरह से बंद कर देता है कि परिणाम उन दो तरीकों के बीच समाप्त होने वाली रेखा के लिए अलग होंगे।

-1

Base64 एन्कोडिंग समस्या के बारे में, मैं इस पुस्तकालय में पाया गया: http://sourceforge.net/projects/migbase64/

मैं पूरी तरह से इसे संचालित नहीं किया है, लेकिन मैं मूल प्रमाणीकरण समाधान ऊपर दिखाए गए के लिए यह उपयोग कर रहा हूँ (और साथ ही छवि एन्कोडिंग/डिकोडिंग के लिए के रूप में), और यह अच्छा काम करता है। यह न्यूलाइन को शामिल करने या नहीं करने के लिए एक पैरामीटर प्रदान करता है।

1

आप मूल लेख को कॉन्फ़िगर करने के लिए java.net.Authenticator का उपयोग कर सकते हैं। विश्व स्तर पर अपने आवेदन के द्वारा भेजे जाने वाले प्रत्येक अनुरोध के लिए, देखें:

0

मैं भी इस समस्या हो रही थी। और अब मैंने इस समस्या को हल कर लिया है। मेरा कोड है:

URL url = new URL(stringUrl); 

    String authStr = "MyAPIKey"+":"+"Password"; 
    System.out.println("Original String is " + authStr); 

// encode data on your side using BASE64 
    byte[] bytesEncoded = Base64.encodeBase64(authStr .getBytes()); 
    String authEncoded = new String(bytesEncoded); 

    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestProperty("Authorization", "Basic "+authEncoded); 

यह कई अन्य लोगों की मदद कर सकता है। शुभकामनाएँ।

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