HttpUrlConnection के साथ प्रीपेडिव बेसिक एथ?

HttpUrlConnection का उपयोग करके प्रीपेडिव मूल HTTP प्रमाणीकरण का उपयोग करने का सबसे अच्छा तरीका क्या है (अभी के लिए मान लें कि मैं एचटीटीपी क्लाइंट का उपयोग नहीं कर सकता)।

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

वेब के समाधान से एकत्रित समाधान "HttpUrlConnection के साथ प्रीपेडिव बेसिक एथ?"

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); 

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

यदि आप जावा 7 या उससे कम का उपयोग कर रहे हैं, तो आपको आधार स्ट्रिंग को बेस64 में एन्कोड करने के लिए एक विधि की आवश्यकता होगी, जैसे:

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

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

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

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

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

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

  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); 

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

बेस 64 एन्कोडिंग समस्या के संबंध में, मुझे यह लाइब्रेरी मिली: http://sourceforge.net/projects/migbase64/

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