`
san_yun
  • 浏览: 2662941 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

正确使用httpclient

 
阅读更多

在发出HTTP请求前,我们先创建了一个HttpClient对象。那么,在实际项目中,我们很可能在多处需要进行HTTP通信,这时候我们不需要为每个请求都创建一个新的HttpClient。因为之前已经提到,HttpClient就像一个小型的浏览器,对于整个应用,我们只需要一个HttpClient就够了。看到这里,一定有人心里想,这有什么难的,用单例啊!!

 

但是现在我们的应用程序使用同一个HttpClient来管理所有的Http请求,一旦出现并发请求,那么 一定会出现多线程的问题。这就好像我们的浏览器只有一个标签页却有多个用户,A要上google,B要上baidu,这时浏览器就会忙不过来了。幸运的 是,HttpClient提供了创建线程安全对象的API,帮助我们能很快地得到线程安全的“浏览器”。

 

publicclass CustomerHttpClient {
    privatestaticfinal String CHARSET = HTTP.UTF_8;
    privatestatic HttpClient customerHttpClient;

    private CustomerHttpClient() {
    }

    publicstaticsynchronized HttpClient getHttpClient() {
        if (null== customerHttpClient) {
            HttpParams params =new BasicHttpParams();
            // 设置一些基本参数
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params,
                    CHARSET);
            HttpProtocolParams.setUseExpectContinue(params, true);
            HttpProtocolParams
                    .setUserAgent(
                            params,
                            "Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build.FRG83) "
                                    +"AppleWebKit/553.1(KHTML,like Gecko) Version/4.0 Mobile Safari/533.1");
            // 超时设置
/* 从连接池中取连接的超时时间 */
            ConnManagerParams.setTimeout(params, 1000);
            /* 连接超时 */
            HttpConnectionParams.setConnectionTimeout(params, 2000);
            /* 请求超时 */
            HttpConnectionParams.setSoTimeout(params, 4000);
            
            // 设置我们的HttpClient支持HTTP和HTTPS两种模式
            SchemeRegistry schReg =new SchemeRegistry();
            schReg.register(new Scheme("http", PlainSocketFactory
                    .getSocketFactory(), 80));
            schReg.register(new Scheme("https", SSLSocketFactory
                    .getSocketFactory(), 443));

            // 使用线程安全的连接管理来创建HttpClient
            ClientConnectionManager conMgr =new ThreadSafeClientConnManager(
                    params, schReg);
            customerHttpClient =new DefaultHttpClient(conMgr, params);
        }
        return customerHttpClient;
    }
}

 参考:http://www.cnblogs.com/codingmyworld/archive/2011/08/17/2141706.html

分享到:
评论

相关推荐

    httpClient需要的jar包

    为了正确使用HttpClient,你需要确保将这些JAR文件添加到你的项目类路径中。 HttpClient的主要知识点包括: 1. **HTTP方法支持**:HttpClient支持GET、POST、PUT、DELETE等多种HTTP方法,以及HEAD、OPTIONS、TRACE...

    HttpClient类所需jar包

    6. **commons-logging.jar**(可选):HttpClient使用了Apache Commons Logging进行日志记录,如果系统中没有其他日志实现,可能需要添加这个库。 7. **commons-codec.jar**:用于编码和解码,如Base64编码,URL...

    使用HttpClient必须的jar包

    在Java项目中使用HttpClient时,为了确保功能的完整性和正确性,通常需要引入一系列的jar包。这些jar包包含了HttpClient的核心组件、依赖库和其他必要的工具,它们共同构成了HttpClient的运行环境。 以下是一些关键...

    httpClient

    HttpClient是Apache Jakarta Common项目下的一个核心组件,专为开发者提供了强大的HTTP客户端编程接口。...HttpClient库不仅支持基本的HTTP...正确使用HttpClient,能够提高应用的网络性能,同时简化HTTP请求的处理流程。

    httpclient

    4. **异步与线程安全**:说明HttpClient如何支持异步请求,以及在多线程环境下正确使用HttpClient的注意事项。 5. **HTTPS支持**:介绍配置SSL上下文,处理证书和信任管理,以支持安全的HTTPS通信。 6. **源码分析...

    一个使用HttpClient调用天气预报接口的例程

    然而,由于这个例程使用了HttpClient,我们需要了解其工作原理和如何在Android环境中正确使用。 7. **注意事项**: - 异步处理:网络请求不应在主线程中进行,以免阻塞用户界面,应使用异步任务或Android的...

    使用httpclient访问servlet

    在IT行业中,网络通信是应用程序之间交互的重要方式。...正确理解和应用HttpClient的各种特性和配置,能够帮助我们构建高效、可靠的网络通信方案。在实际开发中,还需要根据具体项目需求进行适当的调整和优化。

    java使用HttpClient通过url下载文件到本地

    - **创建HttpClient实例**:首先,我们需要创建一个HttpClient对象,例如使用`HttpClientBuilder`或`HttpClients.createDefault()`方法。 - **构建HttpGet请求**:使用`HttpGet`类创建一个HTTP GET请求,指定要...

    HttpClient.zip

    HttpClient是Java中一个重要的HTTP客户端库,用于发送HTTP请求并接收响应。这个库由Apache软件基金会开发,并且在许多企业级应用中广泛使用。...在实际项目中,正确使用HttpClient能够提高网络通信的效率和稳定性。

    Http(get)请求数据Android Studio使用HttpClient

    本教程将聚焦于使用`HttpClient`库进行GET请求,这是获取远程资源最常见的方式。请注意,本教程不涉及POST请求,POST主要用于向服务器提交数据。 ## 1. Android HttpClient介绍 `HttpClient`是Apache HTTP组件的一...

    使用HttpClient实现文件的上传所需lib

    7. **最佳实践**:为了保持代码的整洁和可维护性,通常建议使用try-with-resources语句来确保HttpClient和相关资源的正确关闭,避免内存泄漏。 8. **与其他库的集成**:HttpClient可以与其他Java库(如Spring框架)...

    httpclient使用教程

    ### httpclient使用教程 #### HttpClient概述与重要性 在当今互联网时代,HTTP协议无疑是网络通信中最常用且至关重要的协议之一。随着技术的发展,越来越多的Java应用程序需要直接通过HTTP协议访问网络资源。尽管...

    彻底解决httpClient乱码问题

    本文将深入探讨如何使用HttpClient来彻底解决乱码问题。 HttpClient是一个功能强大的HTTP客户端,支持多种HTTP协议版本,包括GET、POST等请求方法,以及重试、连接管理等功能。在处理中文字符时,由于编码不一致...

    HttpClient使用教程 事例

    在提供的压缩包文件中,"第一个版本.rar"和"第二个版本.rar"可能包含了不同的HttpClient使用示例或者不同版本的代码。你可以解压并查看这些文件,以便更深入地理解和学习HttpClient的具体用法。每个版本可能包含不同...

    HttpClient 登录163邮箱

    HttpClient是Apache基金会开发的一个HTTP客户端库,用于在Java应用程序中执行HTTP请求。...在本例中,我们将探讨如何使用HttpClient登录163邮箱。...正确配置和使用HttpClient,能够实现高效且可靠的网络通信。

    httpclient.jar包下载

    2. **请求和响应模型**:HttpClient使用HttpRequest和HttpResponse对象封装HTTP请求和响应,便于处理请求头、请求体和响应头、响应体。 3. **身份验证和安全**:HttpClient支持多种身份验证机制,包括基本认证、...

    .NET Core中HttpClient的正确打开方式

    在深入讨论正确使用HttpClient之前,我们先来看看它的起源和基本使用方法,进而逐步深入到如何避免常见的陷阱,并介绍.NET Core为我们提供的更高级的HttpClient使用方式。 首先,HttpClient类是.NET Framework中的...

    java httpclient 模拟登录

    以下将详细介绍如何使用Java HttpClient进行模拟登录。 首先,我们需要在项目中引入HttpClient的相关依赖。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache.httpcomponents ...

    使用httpClient组件解析html并解决字符编码

    使用HttpClient组件解析HTML...通过设置HttpClient的字符集参数,并使用`charset`参数来指定字符集,我们可以正确地解析HTML页面的内容。此外,使用`getContent`方法可以截取HTML字符串中的一段文字,满足特定的需求。

    httpClient官方文档

    Apache HttpClient 是一个提供 HTTP 协议客户端功能的开源库,它是 Apache ...用户还能够了解到如何配置HttpClient以适应不同的需求,以及如何在应用程序中正确地集成和使用HttpClient来提高网络通信的效率和可靠性。

Global site tag (gtag.js) - Google Analytics