很多情况下,公司的电脑是加入域的,而且上外网是要通过代理上网的,这总情况下使用httpclient访问外网时必须使用代理,并且要通过NTLM验证,所以需要在httpclient中使用NTLM协议。
关于NTLM,可以参考这里。 以下给出解决此问题的代码。
public static String getWithNTCredential(String url,boolean needProxy,int msTimeOut){ log.info("--get url:[" + url + "]"); String responseBody = null; HttpMethod getMethod = new GetMethod(url); if(msTimeOut>0) { getMethod.getParams().setSoTimeout(msTimeOut); } log.info("--queryString:" + getMethod.getQueryString()); HttpClient httpClient = new HttpClient(); if (needProxy) { String proxyUrl = "10.xx.xx.xx";//代理机IP String proxyPort ="8080";//代理机端口 String proxyUser ="xxxx";//代理用户名 String proxyPassword ="xxxx";//代理用户密码 String domain="xxxx.COM";//计算机所在的域 httpClient.getHostConfiguration().setProxy(proxyUrl,Integer.parseInt(proxyPort)); List authPrefs = new ArrayList(2); authPrefs.add(AuthPolicy.NTLM); httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT,"Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1"); httpClient.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs); // 如果代理需要密码验证,这里设置用户名密码 NTCredentials ntc=new NTCredentials(proxyUser, proxyPassword,proxyUrl,domain); httpClient.getState().setProxyCredentials(AuthScope.ANY,ntc); } try { int statusCode = httpClient.executeMethod(getMethod); log.info("http get url:" + getMethod.getURI()); log.info("----http status code:" + statusCode); if (statusCode == HttpStatus.SC_OK || statusCode==HttpStatus.SC_PARTIAL_CONTENT) { responseBody = getMethod.getResponseBodyAsString(); } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { getMethod.releaseConnection(); } return responseBody; }
注意:该功能是使用commons-httpclient.jar 实现。
下篇文章我会讲述通过 httpclient使用NTLM协与https协议访问双向认证站点。
如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!
相关推荐
NULL 博文链接:https://bewithme.iteye.com/blog/1938178
HttpClient代理访问网络
httpclient使用教程
HTTPClient协议
Http协议使用封装jar包(commons-codec-1.3.jar、commons-httpclient-3.1.jar、commons-logging-1.1.jar) 简单使用方法: public static void main(String[] args) { // String str1 = "...
使用httpClient进行代理
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分...
httpClient 教程 使用事例 单向认证
用VC实现http协议,构造httpserver和httpclient两端应用实例。
httpclient是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,本文档提供使用httpclient的使用方法
java 使用httpclient访问servlet,方便两个不同服务器上的程序相互调用.
Httpclient,一个我们平时开发时经常用到的组件
HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。 适用人群:JavaWeb开发者 使用场景:在Java后端程序中,模拟浏览器端进行Web请求。 其它:...
httpclient来进行https访问
使用HttpClient必须的jar包 使用HttpClient必须的jar包 使用HttpClient必须的jar包
HttpClient是个很不错的开源框架(org.appache.http),封装了访问http的请求头,参数,内容体,响应等等,使用起来更方面更强大。 HttpURLConnection是java的标准类,可以实现简单的基于URL请求、响应功能,什么都...
commons-httpclient,java中使用httpclient中使用的扩展工具
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分...