天天看點

java http 摘要認證_java – Apache HttpClient摘要認證

基本上我需要做的是執行摘要驗證.我嘗試的第一件事是

here的官方示例.

但是當我嘗試執行它(有一些小的更改,Post而不是Get方法)我得到一個

org.apache.http.auth.MalformedChallengeException: missing nonce in challange

at org.apache.http.impl.auth.DigestScheme.processChallenge(DigestScheme.java:132)

當這個失敗我嘗試使用:

DefaultHttpClient client = new DefaultHttpClient();

client.getCredentialsProvider().setCredentials(new AuthScope(null, -1, null), new UsernamePasswordCredentials("", ""));

HttpPost post = new HttpPost(URI.create("http://"));

List nvps = new ArrayList();

nvps.add(new BasicNameValuePair("domain", ""));

post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

DigestScheme digestAuth = new DigestScheme();

digestAuth.overrideParamter("algorithm", "MD5");

digestAuth.overrideParamter("realm", "http://");

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("", ""), 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());

起初我隻是覆寫了“領域”和“随意”的DigestScheme參數.但是,事實證明,在伺服器上運作的PHP腳本需要所有其他參數,但無論是否指定它們,或者當我調用其authenticate()方法時,DigestScheme都不會在授權請求優先級中生成它們. PHP腳本傳回HTTP響應代碼200,其中包含PHP腳本需要cnonce,nc和qop參數的消息.

我一直在努力兩天,沒有運氣.基于所有我認為的問題的原因是PHP腳本.對我來說,當應用程式嘗試通路未經授權時,它不會發送挑戰.

任何想法有誰?

編輯:

還有一件事,我嘗試連接配接cURL,它的作品.