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)
而且有效!
我希望这个回答能帮助到别人!
我正在使用 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)
而且有效!
我希望这个回答能帮助到别人!