401使用HttpURLConnection Android时未经授权的错误?

时间:2014-09-09 21:09:01

标签: java android json http http-headers

我们已经搜索过并且仍然无法解决此问题。我们有一个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 Javahttp://www.muneebahmad.com/index.php/archives/127,但没有成功,我们不断收到401 Unauthorized错误。

根据收到的评论:我们的服务正在使用NTLM身份验证。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

conn.setRequestProperty("授权","基本" +                     Base64.encodeToString(" usernameUsed:passwordUsed" .getBytes(),Base64.NO_WRAP));

上面的代码对我有用。

答案 1 :(得分:0)

我有同样的问题。就我而言,我发送了一个时间戳(基本编码)作为标题之一。设备(我正在测试的)时间设置为过去时间,导致授权失败。

(我知道这篇文章很老了。只是添加了我的经验,它可能对某人有用)