Android 上的摘要获得 401

Posted

技术标签:

【中文标题】Android 上的摘要获得 401【英文标题】:Digest on Android get 401 【发布时间】:2015-06-22 17:00:54 【问题描述】:

我正在尝试对此服务器进行摘要身份验证 http://52.16.207.138/api/v0.1/device/999 user = 5588031263bf4457a7641c07 并通过网络浏览器传递 = 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

【问题讨论】:

Http codes. 我知道401是什么意思,这不是问题。 【参考方案1】:

将我的回答复制到another HTTP digest question:

HttpUrlConnection 不支持摘要式身份验证。如果您的客户必须使用 Digest 进行身份验证,您有几个选择:

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

【讨论】:

以上是关于Android 上的摘要获得 401的主要内容,如果未能解决你的问题,请参考以下文章

android - EWS 2010 中的基本身份验证错误“HTTP/1.1 401 Unauthorized”

React本机推送通知,GCM服务器返回401

如何识别 ionic 和 ios 上的 401 和 408(超时)错误?

怎样获得android上的字体列表

Android如何获得网络上的时间

Android推送通知未经授权的错误401