Android上的摘要获得401

时间:2015-06-22 17:00:54

标签: java android http httpurlconnection digest-authentication

我正在尝试通过网络浏览器对此服务器http://52.16.207.138/api/v0.1/device/999 user = 5588031263bf4457a7641c07和pass = 5588031263bf4457a7641c08进行摘要式身份验证,我获得了200个http代码和一些状态的json。

我的安卓代码:

private JSONObject POST() throws JSONException {
    JSONObject response = null;

    Authenticator.setDefault(new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("5588031263bf4457a7641c07", "5588031263bf4457a7641c08".toCharArray());
        }
    });

    try {

        URL url1 = new URL("http://52.16.207.138/api/v0.1/device/999");
        HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
        conn.setRequestMethod(GET);
        conn.connect();

        int status = conn.getResponseCode();
        InputStream is;

        if(status >= HttpURLConnection.HTTP_BAD_REQUEST)
            is = conn.getErrorStream();
        else
            is = conn.getInputStream();

        Log.d("RespuestaHTTP",String.valueOf(status));

        byte[] buffer = new byte[8196];
        int readCount;
        StringBuilder builder = new StringBuilder();
        while ((readCount = is.read(buffer)) > -1) {
            builder.append(new String(buffer, 0, readCount));
        }
        response = new JSONObject(builder.toString());
        Log.d("Respuesta",response.toString());

        conn.disconnect();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return response;
}

但我总是得到401回复,我不知道我做得不好。

有人可以帮助我???

06-22 18:57:17.797 1708-1750/com.example.urbanclouds.pruebasdigest D/RespuestaHTTP﹕ 401

1 个答案:

答案 0 :(得分:1)

将我的答案复制到another HTTP digest question

HttpUrlConnection不支持摘要式身份验证。如果您的客户端必须使用Digest进行身份验证,您可以选择以下几种方法:

  • 编写自己的HTTP摘要实现。如果您知道需要对哪些服务器进行身份验证,并且可以忽略您不需要的摘要规范部分,那么这可能是一个不错的选择。以下是实施摘要子集的示例:https://gist.github.com/slightfoot/5624590
  • 使用外部库bare-bones-digest,这是Android的摘要库。您可以使用它来解析摘要挑战并生成对它们的响应。它支持常见的摘要用例和一些很少使用的用例,可以在HttpURLConnection之上使用。
  • OkHttpokhttp-digest一起使用,{{3}}是一个为O​​kHttp添加Http Digest支持的插件。使用OkHttp支持摘要很简单,只需添加okhttp-digest作为身份验证器,您就可以获得透明的Http摘要支持。如果您已经使用OkHttp或者切换到它可以,这可能是一个很有吸引力的选择。
  • 使用支持摘要的Apache HttpClient。此选项主要用于完成,因为Google建议不要使用HttpClient并弃用它。