HttpURLConnection身份验证模式

时间:2016-12-07 09:15:52

标签: java httpurlconnection http-authentication

我使用HttpURLConnection类来管理Android应用中的HTTP连接。问题是,在某些服务器上,我有一个代码 401 ,使用的是一个工作在Internet导航器上的URL。我初始化与基本身份验证的连接,但我认为这些服务器需要其他模式。我知道它适用于 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。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

嗯, this post 真的对我很有帮助(但我根本不使用Authenticator课程)现在我的代码完成了这样的工作(如果认证的话)需要):

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

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

  • 使用手动构建的 Digest 请求属性重试(请参阅我提到的帖子)

  • 它有效!

我希望这个答案可以帮助别人!