HttpURLConnection认证方式

HttpURLConnection authentication mode

我正在使用 HttpURLConnection class 来管理我的 Android 应用程序中的 HTTP 连接。问题是,在某些服务器上,我有一个代码 401 使用 URL,它在 Internet 导航器上工作。我使用基本身份验证初始化连接,但我认为这些服务器需要其他模式。我知道它适用于 libCURL 和以下指令:

curl_easy_setopt(pCurlHandle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

但是有没有办法在 Android 上做类似的事情?目前,我这样做:

...
connection.setRequestProperty("Authorization", "Basic " +  Base64.encode("username:password"));
...

我也试过 Authenticator:

Authenticator.setDefault(new Authenticator() {

    @Override
    protected PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication("username", "password".toCharArray());
    }
});

但我的应用程序中仍有 401。有什么想法吗?

好吧,this post 确实帮助了我(但我根本不使用 Authenticator class),现在我的代码可以那样的工作(如果需要身份验证):

  • 使用 Basic 身份验证初始化我的 HttpURLConnection object(请参阅问题代码中的第一个 Java 示例)

  • 测试我是否收到代码 401,如果是,请检查服务器是否被排除在 Digest 身份验证分析响应 headers 之外。

  • 重试 manually-built Digest 请求 属性(参见我提到的 post)

  • 而且有效!

我希望这个回答能帮助到别人!