`
tianyigood
  • 浏览: 5248 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

HttpClient通信协议简单代码实现

阅读更多
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网络通信之HttpClient

    在Java编程领域,网络...总之,Java中的HttpClient是一个强大且灵活的HTTP客户端工具,它使得网络通信变得更加简单。通过阅读源码和编写测试用例,我们可以更深入地理解和掌握HttpClient的使用,提高我们的编程技能。

    httpclient简单示例说明

    HttpClient是Apache软件基金会提供的一个开源库,用于在Java环境中实现HTTP协议。这个库提供了丰富的功能,包括发起HTTP请求、处理响应、管理连接池等,使得开发者可以方便地进行网络通信。本文将深入探讨HttpClient...

    httpclient 3.1 jar包 手册 源代码

    HttpClient是一个由Apache基金会开发的Java库,主要用于执行HTTP请求,实现客户端的HTTP通信。本手册将详细探讨HttpClient 3.1版本,包括其源代码分析和使用指南,帮助开发者充分利用这个强大的工具。 一、...

    简单的httpClient访问

    在IT行业中,HttpClient是一个广泛使用的Java库,它允许开发者通过HTTP协议进行网络通信。这篇名为“简单的httpClient访问”的博文...通过学习和实践这些知识,开发者可以有效地利用HttpClient实现各种网络通信任务。

    HttpClient+ Spring实现多线程

    总的来说,HttpClient与Spring的结合使得在Java应用中实现高效、安全的多线程HTTP通信变得简单。通过正确配置和管理连接池,可以有效控制并发量,防止资源耗尽,同时利用Spring的容器特性简化代码和提高可维护性。

    javaeye api [java httpclient版] 简单封装

    通过这个简单的封装,JavaEyeClient 使得开发者在使用 HttpClient 进行网络请求时,可以避免很多底层的细节,更专注于业务逻辑,提高了开发效率和代码的可读性。如果你对具体的使用方法感兴趣,可以参考提供的博文...

    httpclient实现webservice客户端

    下面是一段简单的示例代码,展示了如何使用HttpClient发送一个POST请求,模拟调用一个SOAP WebService: ```java import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache....

    使用 HttpClient 和 HtmlParser 实现简易网络爬虫

    HttpClient提供了丰富的特性,遵循最新的HTTP标准,支持GET和POST等请求方法,使得创建基于HTTP协议的应用程序变得更加简单。通过HttpClient,我们可以方便地访问和下载互联网上的网页内容。你可以在这里找到...

    httpclient jar

    《HttpClient详解:构建高效可靠的...通过深入理解和熟练使用HttpClient,可以提升Java应用的网络通信能力,提高代码的可维护性和稳定性。在实际项目中,合理利用HttpClient的优势,可以有效提升程序的性能和用户体验。

    JAVA发送HttpClient请求及接收请求完整代码实例

    在Java编程中,HttpClient是一个非常重要的工具,它允许开发者通过HTTP协议发送请求并接收服务器的响应。HttpClient库是由Apache软件基金会开发的,广泛应用于各种网络通信场景,包括数据的获取、上传、下载等。本篇...

    HttpClient发送http请求(post和get)需要的jar包+内符java代码案例+注解详解

    这个压缩包可能包含了实现HTTP GET和POST请求所需的jar包以及示例代码,帮助开发者理解如何使用HttpClient进行网络通信。下面将详细介绍HttpClient库,HTTP请求的基本概念,以及GET和POST方法的差异。 HttpClient是...

    httpclient所需lib

    《HttpClient详解及其依赖库》 HttpClient是Apache基金会开发的一个开源HTTP客户端库,广泛应用于Java编程领域,用于执行HTTP...理解并熟练掌握HttpClient的使用,将大大提升我们在网络通信中的开发效率和代码质量。

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    总结,`commons-httpclient-3.0.jar`在JAVA中的应用,不仅提供了一种简单易用的HTTP客户端实现,还具有丰富的特性和扩展性,对于理解和实现网络通信具有重要的学习价值。然而,随着技术的进步,开发者应关注并适时...

    httpclient4.3中文教程

    例如,以下代码展示了如何创建一个简单的 GET 请求: ```java CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpget = new HttpGet("http://localhost/"); CloseableHttpResponse ...

    httpClient4.1入门教程.pdf

    Apache HttpClient是一个广泛使用的开源Java库,它提供了高效的HTTP客户端编程工具包,用于实现HTTP协议的客户端通信。它支持HTTP协议的新版本和各种推荐标准,能够满足开发人员在构建基于Java的应用程序时,通过...

    httpclient-4.5所需jar包

    HTTPClient是Apache软件基金会的一个开放源代码项目,它提供了一个用Java实现的HTTP客户端API,使得开发者能够方便地创建能够处理HTTP协议的应用程序。在Java开发中,HTTPClient库经常被用于执行HTTP请求,比如GET、...

    httpclient http客户端

    这个库使得在Java应用中实现HTTP通信变得简单,尤其在需要模拟浏览器行为或者进行API测试时非常实用。下面将详细介绍HttpClient的主要功能、使用方法以及如何在Eclipse工程中集成和应用。 一、HttpClient主要功能 ...

    httpclient 4.3 中文版

    无论是发送简单的 GET 请求还是复杂的 POST 请求,HttpClient 都能够轻松应对。然而,需要注意的是,它并不是一个完整的 Web 浏览器替代品,而是专注于 HTTP 协议本身的实现。因此,在使用时要根据具体需求合理选择...

    Java中Httpclient需要的jar包(httpclient.jar,httpcore.jar及commons-logging.jar)

    Commons Logging允许开发者选择他们喜欢的日志实现,如Log4j或Java内置的日志框架,而无需直接依赖特定的日志实现,提高了代码的可移植性和灵活性。 使用这三个jar包,你可以轻松地在Java程序中集成HTTP请求功能。...

    org.apache.commons.httpclient相关资源包

    Apache HttpClient 是一个强大的Java库,...无论是简单的网页抓取,还是复杂的Web服务调用,HttpClient都能提供强大的支持。在实际开发中,理解这些库的内部工作原理和使用方式,将有助于编写出更稳定、可维护的代码。

Global site tag (gtag.js) - Google Analytics