使用NTLM身份验证时,最新的Apache HttpClient 4.1.1出现HTTP / 1.1 407错误

问题描述

|| 我正在尝试使用Apache HttpClient 4.1.1库(http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html)从我公司的代理后面访问网站使用带有NTLM身份验证的ISA服务器,但是我不断收到HTTP 407代理身份验证所需的错误代码
    HttpHost proxy = new HttpHost(\"myProxyHost\",80,\"http\");
    DefaultHttpClient httpClient = new DefaultHttpClient();
    httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);

    NTCredentials creds = new NTCredentials(\"myWindowsUserName\",\"myWindowsPwd\",\"localhost\",\"myCompanyDomain\");
    AuthScope authScope = new AuthScope(\"myProxyHost\",\"\",\"NTLM\");
    httpClient.getCredentialsProvider().setCredentials(authScope,creds);

    HttpHost target = new HttpHost(\"www.google.com\",\"http\");
    HttpGet get = new HttpGet(\"/\");
    System.out.println(\"executing request to \" + target + \" via \" + proxy);
    HttpResponse rsp = httpClient.execute(target,get);

    System.out.println(\"----------------------------------------\");
    System.out.println(rsp.getStatusLine());
    Header[] headers = rsp.getAllHeaders();
    for (int i = 0; i<headers.length; i++) {
        System.out.println(headers[i]);
    }
    System.out.println(\"----------------------------------------\");
O / P 通过http:// myProxyHost:80执行对http://www.google.com:80的请求 ---------------------------------------- 需要HTTP / 1.1 407代理身份验证(ISA服务器需要授权才能完成请求。拒绝访问Web代理筛选器。) 通过:1.1 myCompanyServer 代理授权:协商 代理验证:Kerberos 代理验证:NTLM 连接:保持活动 代理连接:保持活动 语法:无缓存 缓存控制:无缓存 内容类型:text / html 内容长度:4120 ---------------------------------------- 我在这里想念什么? 更新: 在同一环境中,使用JDK URL和URLConnection类的代码有效! 工作代码
    System.setProperty(\"http.proxyHost\",\"myProxyHost\");
    System.setProperty(\"http.proxyPort\",\"80\");

    URL url = new URL(\"http://www.google.com\");
    URLConnection con = url.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    in.close();
O / P Google window.google = {kEI:\“ _ N3cTaLFMY6cvgoH9MypDw \”,...     

解决方法

我在HttpClient 4.1.2中遇到了类似的问题。对我来说,它已通过恢复为HttpClient 4.0.3得以解决。我无法使用内置实现或JCIFS使NTLM与4.1.2一起使用。     ,如果您对LGPL许可软件没有任何问题,则可以尝试使用Samba JCIFS项目开发的NTLM引擎,而不是默认使用Apache HttpClient使用的内部引擎。 有关详细说明,请参阅此文档: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/src/site/apt/ntlm.apt PS:JDK URL和URLConnection类之所以起作用,是因为它们在Microsoft Windows上运行时会利用特定于平台的调用     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...