gpt4 book ai didi

android - HttpUrlConnection 在 Android 上找不到 NTLM 质询

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:40 28 4
gpt4 key购买 nike

我正在尝试使用 HttpUrlConnection 类将我的 Android 应用程序连接到 IIS 服务器。

我的服务器需要用户进行身份验证,因此它向客户端发送以下质询:

WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM

我的问题是 HttpUrlConnection 似乎没有解析它。因此 getPasswordAuthentication() 永远不会被调用,它会返回一个 IOException“未找到身份验证挑战”。

这是我的代码:

Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication("myUsername", "myPassword".toCharArray());
}
});

URL url = new URL(myUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");
conn.setRequestProperty("Accept-Encoding", "gzip");
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("Connection", "close");
conn.setDoOutput(true);
conn.setDoInput(true);

try
{
conn.connect();
status_code = conn.getResponseCode();
}catch (IOException e) {
...
}

我真的开始认为 HttpUrlConnection 不支持 NTLM 质询。我看到一些库似乎可以完成这项工作,但我不想使用外部库。

有人可以确认是否可以让 HttpUrlConnection 在没有外部库的情况下处理 NTLM 质询吗?

最佳答案

我只能通过设置 AuthScheme 和下面的库使其与 HttpClient 一起工作:http://jcifs.samba.org/src/jcifs-krb5-1.3.17.zip .

HttpClient httpclient = new HttpClient(httpParameters, context);
NTCredentials creds = new NTCredentials(“username”, “password”, "", "dir");
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(context.getString(“whatever is your main URL”), -1), creds);
httpclient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory());

然后您实现 JCIFS 引擎和工厂。您可以在 http://hc.apache.org/httpcomponents-client-4.2.x/ntlm.html 中找到 sample

关于android - HttpUrlConnection 在 Android 上找不到 NTLM 质询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176010/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com