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

Java 使用NTLM身份验证时,最新Apache HttpClient 4.1.1出现HTTP/1.1 407错误,java,proxy,ntlm,apache-httpclient-4.x,Java,Proxy,Ntlm,Apache Httpclient 4.x,我正试图使用Apache HttpClient 4.1.1库()从我公司的代理服务器后面访问站点,该代理服务器使用带NTLM身份验证的ISA服务器,但我不断收到HTTP 407代理身份验证要求的错误: 代码片段 System.setProperty("http.proxyHost", "myProxyHost"); System.setProperty("http.proxyPort", "80"); URL url = new URL("http://www.goog

我正试图使用Apache HttpClient 4.1.1库()从我公司的代理服务器后面访问站点,该代理服务器使用带NTLM身份验证的ISA服务器,但我不断收到HTTP 407代理身份验证要求的错误:

代码片段

    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();
HttpHost proxy=newhttphost(“myProxyHost”,80,“http”);
DefaultHttpClient httpClient=新的DefaultHttpClient();
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,PROXY);
NTCredentials creds=新的NTCredentials(“myWindowsUserName”、“myWindowsPwd”、“localhost”、“myCompanyDomain”);
AuthScope AuthScope=new AuthScope(“myProxyHost”,80,”,“NTLM”);
httpClient.getCredentialsProvider().setCredentials(authScope,creds);
HttpHost target=新的HttpHost(“www.google.com”,80,“http”);
HttpGet=新的HttpGet(“/”);
System.out.println(“通过“+代理”执行对“+目标+”的请求);
HttpResponse rsp=httpClient.execute(target,get);
System.out.println(“--------------------------------------------------------”;
System.out.println(rsp.getStatusLine());
Header[]headers=rsp.getAllHeaders();

对于(int i=0;i如果您对LGPL许可软件没有问题,您可以尝试使用由项目开发的NTLM引擎,而不是Apache HttpClient默认使用的内部引擎

有关详细说明,请参阅本文档:


PS:JDK URL和URLConnection类之所以能够工作,是因为它们在Microsoft Windows上运行时使用特定于平台的调用。我在HttpClient 4.1.2上遇到了类似的问题。对我来说,它是通过还原到HttpClient 4.0.3解决的。我无法让NTLM使用内置实现或使用JCIFS来处理4.1.2。

()表示不再支持它。我一直希望HttpClient能够满足要求,因为它的文档现在声称完全支持NTLM。这就是我认为我的代码有问题的原因。Jespa,jCIFS网站上提到的替代方案看起来很有趣。@Kodenija这是对jCIFS的常见误解。不推荐使用的是继承人的HTTP相关代码,而不是库本身
    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();
Google window.google={kEI:"_N3cTaLFMY6cvgOH9MypDw",...