मूल रूप से मुझे जो करना है वह पाचन प्रमाणीकरण करने के लिए है। पहली चीज मैंने कोशिश की है आधिकारिक उदाहरण here उपलब्ध है।अपाचे एचटीपी क्लाइंट डाइजेस्ट प्रमाणीकरण
DefaultHttpClient client = new DefaultHttpClient();
client.getCredentialsProvider().setCredentials(new AuthScope(null, -1, null), new UsernamePasswordCredentials("<username>", "<password>"));
HttpPost post = new HttpPost(URI.create("http://<someaddress>"));
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("domain", "<username>"));
post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
DigestScheme digestAuth = new DigestScheme();
digestAuth.overrideParamter("algorithm", "MD5");
digestAuth.overrideParamter("realm", "http://<someaddress>");
digestAuth.overrideParamter("nonce", Long.toString(new Random().nextLong(), 36));
digestAuth.overrideParamter("qop", "auth");
digestAuth.overrideParamter("nc", "0");
digestAuth.overrideParamter("cnonce", DigestScheme.createCnonce());
Header auth = digestAuth.authenticate(new
UsernamePasswordCredentials("<username>", "<password>"), post);
System.out.println(auth.getName());
System.out.println(auth.getValue());
post.setHeader(auth);
HttpResponse ret = client.execute(post);
ByteArrayOutputStream v2 = new ByteArrayOutputStream();
ret.getEntity().writeTo(v2);
System.out.println("----------------------------------------");
System.out.println(v2.toString());
System.out.println("----------------------------------------");
System.out.println(ret.getStatusLine().getReasonPhrase());
System.out.println(ret.getStatusLine().getStatusCode());
सबसे पहले मेरे पास है: लेकिन जब मैंने उसे अमल करने की कोशिश (कुछ छोटे परिवर्तन के साथ, पोस्ट प्राप्त विधि के बजाय) मैं एक
org.apache.http.auth.MalformedChallengeException: missing nonce in challange
at org.apache.http.impl.auth.DigestScheme.processChallenge(DigestScheme.java:132)
जब यह विफल रहा है मैं का उपयोग कर की कोशिश की मिल केवल "क्षेत्र" और "nonce" DigestScheme पैरामीटर overridden। लेकिन यह पता चला कि सर्वर पर चल रहे PHP स्क्रिप्ट के लिए अन्य सभी पैराम की आवश्यकता है, लेकिन इससे कोई फर्क नहीं पड़ता कि मैं उन्हें निर्दिष्ट करता हूं या नहीं, DigestScheme उन्हें प्रमाणीकरण अनुरोधप्रतिर्टी में उत्पन्न नहीं करता है जब मैं इसकी प्रमाणीकृत() विधि कहता हूं। और PHP स्क्रिप्ट HTTP संदेश कोड 200 को एक संदेश के साथ देता है कि PHP स्क्रिप्ट को cnonce, nc और qop पैरामीटर की आवश्यकता होती है।
मैं दो दिनों के लिए इस के साथ संघर्ष कर रहा है, और कोई भाग्य। सबकुछ के आधार पर मुझे लगता है कि समस्या का कारण PHP स्क्रिप्ट है। मुझे लगता है कि जब ऐप अनधिकृत पहुंचने का प्रयास करता है तो यह एक चुनौती नहीं भेजता है।
कोई भी विचार किसी को भी?
संपादित करें: एक और बात, मैं cURL के साथ जोड़ने की कोशिश की है और यह काम करता है।
ऐसा लगता है कि सर्वर गैर-मानक चुनौतियों को भेज रहा है। क्या आप इसे ब्राउज़र में आज़मा सकते हैं और हेडर ट्रेस प्राप्त कर सकते हैं? –
मैंने सर्वर पर एक HttpURLConnection बनाया है और प्रतिक्रिया शीर्षलेख मुद्रित किया है। नीचे एक चुनौती कैसी दिखती है: कुंजी = www-प्रमाणीकृत वैल्यू = डाइजेस्ट रीयलम = "रीस्ट एपीआई" कूप = "ऑथ" नॉन = "4c063992df3dd" opaque = "aba3d4b49c454e1974970e7b5514b001" – anqe1ki11er