1,首先创建httpclient的单例对象
public class HttpClientFactory {
private static HttpClient httpClient;
/** 设置对单host最大的连接数(默认所有链接都对同一个host) */
private static int maxConnPerHost = 32;
/** 设置最大链接数 默认为20个 */
private static int maxTotalConn = 128;
/** 链接url的超时时间,单位是毫秒(不是response超时时间) */
private static int connectionTimeOut = 12000;
/** 等待响应超时时间 */
private static int soTimeOut = 10000;
/** 等待连接池超时时间 */
private static int connectionPoolTimeOut = 10000;
/**
* 单例模式,杜绝手动实例化
*/
private HttpClientFactory() {
}
/**
* httpclient的单例
*
* @return
*/
public static HttpClient getHttpClient() {
if (httpClient == null) {
synchronized (HttpClientFactory.class) {
if (httpClient == null) {
createHttpClient();
}
}
}
return httpClient;
}
/**
* HttpClient的创建方法
*/
private static void createHttpClient() {
final HttpConnectionManager httpConManager = populateMultiThreadConnectionMananger();
retryHandler(httpConManager);
}
/**
* 这里组装的是 MultiThreadedHttpConnectionManager
*
* @return MultiThreadedHttpConnectionManager
*/
private static HttpConnectionManager populateMultiThreadConnectionMananger() {
final HttpConnectionManager httpConManager = new MultiThreadedHttpConnectionManager();
final HttpConnectionManagerParams conManagerParam = new HttpConnectionManagerParams();
// 设置超时时间等参数
conManagerParam.setMaxTotalConnections(maxTotalConn);
conManagerParam.setDefaultMaxConnectionsPerHost(maxConnPerHost);
conManagerParam.setConnectionTimeout(connectionTimeOut);
conManagerParam.setSoTimeout(soTimeOut);
httpConManager.setParams(conManagerParam);
return httpConManager;
}
/**
* 组装请求重试handler,将默认重试3次改为不重试
*
* @param conManager
* @param retryhandler
*/
private static void retryHandler(
final HttpConnectionManager conManager) {
// 将默认重试设为0
//如果设置为0, 则代表不会自动重试,默认连接超时时间1s钟,
//经测试10, 则会重试10次连接每次1s钟,所以会耗时11s
//true: 是否将方法重试 , false:只重试url连接
final DefaultHttpMethodRetryHandler retryhandler = new DefaultHttpMethodRetryHandler(
10, false);
httpClient = new HttpClient(conManager);
httpClient.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
retryhandler);
httpClient.getParams().setConnectionManagerTimeout(connectionPoolTimeOut);
}
}
2,创建postMethod的对象,组装method的参数
public class PostMethodFactory {
/** content_type名称常量 */
private final static String CONTENT_TYPE_KEY = "Content-Type";
/** content_type值常量 */
private final static String CONTENT_TYPE_VALUE = "text/xml; charset=";
/**
* 创建PostMethod
* @param url 目标url
* @param soTimeOut response超时时间
* @param content 发送内容
* @return PostMethod
*/
public static PostMethod createPostMethod(final String url, final int soTimeOut,
final String content, String requestCharset,
String responseCharset) {
//validate first
if (StringUtils.isBlank(url) || StringUtils.isBlank(content)) {
System.out.println("参数检查失败");
}
final PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader(CONTENT_TYPE_KEY, CONTENT_TYPE_VALUE + requestCharset);
//对method设置超时时间
final HttpMethodParams httpMethodParams = new HttpMethodParams();
httpMethodParams.setSoTimeout(soTimeOut);
httpMethodParams.setContentCharset(responseCharset);
postMethod.setParams(httpMethodParams);
try {
postMethod.setRequestEntity(new StringRequestEntity(content, null, requestCharset));
} catch (UnsupportedEncodingException e) {
System.out.println("不支持字符集");
}
return postMethod;
}
}
3,测试请求响应数据
// 获取httpclient连接实例
HttpClient httpClient = HttpClientFactory.getHttpClient();
// http的prototype 协议类型
PostMethod postMethod = PostMethodFactory.createPostMethod(url,
soTimeOut, content, requestCharset, responseCharset);
int returnCode = httpClient.executeMethod(postMethod);
分享到:
相关推荐
在Java编程领域,网络...总之,Java中的HttpClient是一个强大且灵活的HTTP客户端工具,它使得网络通信变得更加简单。通过阅读源码和编写测试用例,我们可以更深入地理解和掌握HttpClient的使用,提高我们的编程技能。
HttpClient是Apache软件基金会提供的一个开源库,用于在Java环境中实现HTTP协议。这个库提供了丰富的功能,包括发起HTTP请求、处理响应、管理连接池等,使得开发者可以方便地进行网络通信。本文将深入探讨HttpClient...
HttpClient是一个由Apache基金会开发的Java库,主要用于执行HTTP请求,实现客户端的HTTP通信。本手册将详细探讨HttpClient 3.1版本,包括其源代码分析和使用指南,帮助开发者充分利用这个强大的工具。 一、...
在IT行业中,HttpClient是一个广泛使用的Java库,它允许开发者通过HTTP协议进行网络通信。这篇名为“简单的httpClient访问”的博文...通过学习和实践这些知识,开发者可以有效地利用HttpClient实现各种网络通信任务。
总的来说,HttpClient与Spring的结合使得在Java应用中实现高效、安全的多线程HTTP通信变得简单。通过正确配置和管理连接池,可以有效控制并发量,防止资源耗尽,同时利用Spring的容器特性简化代码和提高可维护性。
通过这个简单的封装,JavaEyeClient 使得开发者在使用 HttpClient 进行网络请求时,可以避免很多底层的细节,更专注于业务逻辑,提高了开发效率和代码的可读性。如果你对具体的使用方法感兴趣,可以参考提供的博文...
下面是一段简单的示例代码,展示了如何使用HttpClient发送一个POST请求,模拟调用一个SOAP WebService: ```java import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache....
HttpClient提供了丰富的特性,遵循最新的HTTP标准,支持GET和POST等请求方法,使得创建基于HTTP协议的应用程序变得更加简单。通过HttpClient,我们可以方便地访问和下载互联网上的网页内容。你可以在这里找到...
《HttpClient详解:构建高效可靠的...通过深入理解和熟练使用HttpClient,可以提升Java应用的网络通信能力,提高代码的可维护性和稳定性。在实际项目中,合理利用HttpClient的优势,可以有效提升程序的性能和用户体验。
在Java编程中,HttpClient是一个非常重要的工具,它允许开发者通过HTTP协议发送请求并接收服务器的响应。HttpClient库是由Apache软件基金会开发的,广泛应用于各种网络通信场景,包括数据的获取、上传、下载等。本篇...
这个压缩包可能包含了实现HTTP GET和POST请求所需的jar包以及示例代码,帮助开发者理解如何使用HttpClient进行网络通信。下面将详细介绍HttpClient库,HTTP请求的基本概念,以及GET和POST方法的差异。 HttpClient是...
《HttpClient详解及其依赖库》 HttpClient是Apache基金会开发的一个开源HTTP客户端库,广泛应用于Java编程领域,用于执行HTTP...理解并熟练掌握HttpClient的使用,将大大提升我们在网络通信中的开发效率和代码质量。
总结,`commons-httpclient-3.0.jar`在JAVA中的应用,不仅提供了一种简单易用的HTTP客户端实现,还具有丰富的特性和扩展性,对于理解和实现网络通信具有重要的学习价值。然而,随着技术的进步,开发者应关注并适时...
例如,以下代码展示了如何创建一个简单的 GET 请求: ```java CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpget = new HttpGet("http://localhost/"); CloseableHttpResponse ...
Apache HttpClient是一个广泛使用的开源Java库,它提供了高效的HTTP客户端编程工具包,用于实现HTTP协议的客户端通信。它支持HTTP协议的新版本和各种推荐标准,能够满足开发人员在构建基于Java的应用程序时,通过...
HTTPClient是Apache软件基金会的一个开放源代码项目,它提供了一个用Java实现的HTTP客户端API,使得开发者能够方便地创建能够处理HTTP协议的应用程序。在Java开发中,HTTPClient库经常被用于执行HTTP请求,比如GET、...
这个库使得在Java应用中实现HTTP通信变得简单,尤其在需要模拟浏览器行为或者进行API测试时非常实用。下面将详细介绍HttpClient的主要功能、使用方法以及如何在Eclipse工程中集成和应用。 一、HttpClient主要功能 ...
无论是发送简单的 GET 请求还是复杂的 POST 请求,HttpClient 都能够轻松应对。然而,需要注意的是,它并不是一个完整的 Web 浏览器替代品,而是专注于 HTTP 协议本身的实现。因此,在使用时要根据具体需求合理选择...
Commons Logging允许开发者选择他们喜欢的日志实现,如Log4j或Java内置的日志框架,而无需直接依赖特定的日志实现,提高了代码的可移植性和灵活性。 使用这三个jar包,你可以轻松地在Java程序中集成HTTP请求功能。...
Apache HttpClient 是一个强大的Java库,...无论是简单的网页抓取,还是复杂的Web服务调用,HttpClient都能提供强大的支持。在实际开发中,理解这些库的内部工作原理和使用方式,将有助于编写出更稳定、可维护的代码。