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,它的作品.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值