gpt4 book ai didi

android - NTLM 身份验证

转载 作者:行者123 更新时间:2023-11-29 14:12:36 26 4
gpt4 key购买 nike

我正在尝试创建一个应用程序,该应用程序使用用户名和密码连接到使用 NTLM 身份验证(不是我的,所以我无法更改身份验证方法)的网页,并返回页面的源代码,稍后我将使用它提取我需要的信息。

我的问题是身份验证步骤。使用 HttpUrlConnection 返回错误 401-Unauthorized。我正在使用 jcifs。已经添加到build.gradle文件中了

compile group: 'jcifs', name: 'jcifs', version: '1.3.17'

代码灵感来自这里:

NTLM Authentication with HttpURLConnection

类声明之前的导入行

import org.apache.http.impl.auth.NTLMEngineException;

不起作用,因为我怀疑 httpclient 已被弃用

我的代码示例:

public class DataFetcher extends AsyncTask<String, Void, String>{
protected String doInBackground(String... urls){
jcifs.Config.registerSmbURLHandler();
URL url;
HttpURLConnection connection = null;

String result = "" ;

try{
url = new URL(urls[0]);
Log.i("URL Connected", "Done");
connection = (HttpURLConnection) url.openConnection();
Log.i("Connection Established","Done");

InputStream inputStream;
int status = connection.getResponseCode();
if(status != HttpURLConnection.HTTP_OK){
inputStream = connection.getErrorStream();
}else {
inputStream = connection.getInputStream();
}
Log.i("Input Stream made","Done");
InputStreamReader reader = new InputStreamReader(inputStream);
Log.i("Input Stream Reader","Done");


int data = reader.read();
while(data!=-1){
result += (char) data;
data = reader.read();
}

}catch(MalformedURLException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}

Log.i("Done",result);
Log.i("Response",""+connection.getHeaderFields());
return result;

}
}

public void fetchData(){
String url = "http://DOMAIN%5user:password@server/page.aspx";
DataFetcher fetcher = new DataFetcher();
fetcher.execute(url);
}

我检查了我发现的所有链接中的大部分(如果不是全部),但是大多数链接使用 HttpClient(已弃用)和 apache 客户端(也已弃用)

最佳答案

我正在积极解决同样的问题,但我现有的解决方法涉及针对 API 22。当谷歌在 2018 年 8 月开始强制要求最低 API 23 时,这显然不会继续下去,但这可能会让你现在开始.

关于android - NTLM 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48244411/

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