我们已经搜索过并且仍然无法解决此问题。我们有一个REST Web服务,并试图从我们的Android应用程序访问它。从Web浏览器或Chrome中的Advanced Rest Client扩展访问时,Web服务URL可以正常工作。我们的网址如下:
http://10.52.1.1:8080/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Items(128%20SDRAM).JSON
一旦将其输入浏览器,我们就会提示输入凭据。输入凭据后,将返回JSON结果。
在我们的Android应用中,我们正在尝试以下方法:
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("domain\\user", "password".toCharArray());
}
});
URL url = new URL(urlstring);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(false);
conn.setDoInput(true);
conn.setRequestMethod("GET");
conn.setConnectTimeout(60000);
InputStream istream = conn.getInputStream();
任何想法我们做错了什么?我们尝试了不同的方法,类似于Connecting to remote URL which requires authentication using Java和http://www.muneebahmad.com/index.php/archives/127,但没有成功,我们不断收到401 Unauthorized错误。
根据收到的评论:我们的服务正在使用NTLM身份验证。
感谢您的帮助!
答案 0 :(得分:0)
conn.setRequestProperty("授权","基本" + Base64.encodeToString(" usernameUsed:passwordUsed" .getBytes(),Base64.NO_WRAP));
上面的代码对我有用。
答案 1 :(得分:0)
我有同样的问题。就我而言,我发送了一个时间戳(基本编码)作为标题之一。设备(我正在测试的)时间设置为过去时间,导致授权失败。
(我知道这篇文章很老了。只是添加了我的经验,它可能对某人有用)