问题描述
||
我正在尝试使用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上运行时会利用特定于平台的调用