2

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

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

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

代码灵感来自这里:

使用 HttpURLConnection 进行 NTLM 身份验证

类声明之前的导入行

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 客户端(也已弃用)

4

1 回答 1

-1

我正在积极解决同样的问题,但我所采用的解决方法涉及以 API 22 为目标。当 Google 在 2018 年 8 月开始强制要求 API 23 最低要求时,这显然不会继续工作,但这可能会让你现在就开始。

于 2018-03-20T18:44:43.240 回答