有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HttpClient 4.2、基本身份验证和AuthScope

我有一个应用程序连接到需要基本身份验证的站点。这些站点是在运行时提供的,在编译时是未知的

我正在使用HttpClient 4.2

我不确定下面的代码是否是我应该如何指定基本身份验证的,但文档会建议这样做。但是,我不知道在AuthScope的构造函数中传递什么。我原以为null参数意味着提供的凭证应该用于所有URL,但它抛出了一个NullPointerException,所以显然我错了

m_client = new DefaultHttpClient();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(m_userName, m_password);
((DefaultHttpClient)m_client).getCredentialsProvider().setCredentials(new AuthScope((HttpHost)null), credentials);

共 (2) 个答案

  1. # 2 楼答案

    至少从版本4.2.3(我想在版本3.X之后),接受的答案不再有效。相反,请执行以下操作:

    private HttpClient createClient() {
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setContentCharset(params, "UTF-8");
    
        Credentials credentials = new UsernamePasswordCredentials("user", "password");
        DefaultHttpClient httpclient = new DefaultHttpClient(params);
        httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials);
    
        return httpclient;
    }
    

    JavaDoc for AuthScope.ANY说,在未来版本的HttpClient中,此参数的使用将停止,因此使用此参数的风险由您自己承担。更好的选择是使用AuthScope中定义的构造函数之一

    有关如何使请求先发制人的讨论,请参阅:

    Preemptive Basic authentication with Apache HttpClient 4