`
wbj0110
  • 浏览: 1603729 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

用单例模式为应用中所有HTTP请求服务创建一个HttpClient

阅读更多
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
 
public class CustomHttpClient {
private static HttpClient customHttpClient;
 
private CustomHttpClient(){};
 
public static synchronized HttpClient getHttpClient(){
if(customHttpClient == null){
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_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, 5000);
/* 请求超时 */
HttpConnectionParams.setSoTimeout(params, 10000);
// 设置我们的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);
            customHttpClient = new DefaultHttpClient(conMgr, params);
}
return customHttpClient;
}
public Object clone() throws CloneNotSupportedException{
throw new CloneNotSupportedException();
}
}

 

分享到:
评论

相关推荐

    HttpClientHelper 工具类

    这样确保了在整个应用程序生命周期中,HttpClientHelper只有一个实例被创建和使用。 5. **异常处理**:HttpClientHelper 应该包含了适当的错误处理机制,如捕获网络异常、解析异常等,以确保在出现问题时能够给出...

    dotnet 6 精细控制 HttpClient 网络请求超时.rar

    这意味着如果一个请求在网络中卡住,它可能会无限制地等待响应,这可能导致应用程序挂起。因此,我们需要手动设置超时以避免这种情况。 三、设置请求超时 1. **Timeout 属性**:HttpClient有一个Timeout属性,可以...

    HttpClient

    HttpClient是Java编程中用于执行HTTP请求的一个库,广泛应用于Android开发和服务器端的HTTP通信。在Android平台上,HttpClient因其灵活性和强大的功能而受到青睐,尽管在Android 6.0(API级别23)之后,其已被弃用,...

    C#HttpClient+http通信+http协议网络通信+C#web通信+C#WebClient

    `HttpClient`设计为一个面向对象的API,可以更方便地管理并发请求,并且它的生命周期管理也更为合理,通常建议将其作为单例模式使用以避免频繁创建和销毁对象。 使用`HttpClient`发送GET请求非常简单: ```csharp ...

    第14讲 谈谈你知道的设计模式1

    例如,单例模式在Spring中用于管理bean的生命周期,工厂模式在BeanFactory中用于创建bean,代理模式用于AOP(面向切面编程),还有策略模式在处理事件和AOP拦截器时应用。构建器模式则常用于配置对象的复杂构建,如...

    Android联网优化

    本话题主要探讨了如何通过代码实现Android应用的联网优化,特别是针对线程池的管理和单例模式的应用。 首先,我们来看`HttpThreadPool.java`,这是一个可能实现了线程池管理的类。在Android中,频繁的网络请求可能...

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

    原因在于,尽管HttpClient实现了IDisposable接口,如果每次请求都创建一个新的HttpClient实例,实际上会为每一个实例打开一个socket连接,这不仅增加了资源的消耗,而且在请求结束后,虽然实例被释放了,但底层的...

    Asp.Net Core2.1前后使用HttpClient的两种方式

    首先创建一个`IHttpClient`接口和一个`StandardHttpClient`实现类,然后在`Startup.cs`中注册这个实现类为单例: ```csharp services.AddSingleton, StandardHttpClient>(); public interface IHttpClient { // ...

    HttpManager

    `getInstance()`是单例模式的实现,确保整个程序中只有一个`HttpClient`实例。 接下来,我们来看如何发送HTTP请求。以GET请求为例: ```cpp HttpRequest* request = new HttpRequest(); request->setUrl(...

    C#网络应用编程第二版全书源码

    《C#网络应用编程第二版》是一本深入探讨C#在网络编程领域的专著,它涵盖了丰富的实例和详尽的解析,旨在帮助读者...同时,与作者的交流也为我们提供了一个互动学习的机会,使我们能够更好地解决问题并深化理论知识。

    App远程登录与会话维持的实现.pdf

    单例模式确保在整个应用程序中只有一个HttpClient实例,所有网络请求共享同一会话,从而简化会话管理并提高效率。 4. **服务端接口设计** 服务端需要设计一套安全的接口,供App进行登录验证和其他业务操作。登录...

    金山文档中台对接v6 java

    最后,为了提高代码的可维护性和可测试性,推荐采用面向接口的编程,使用设计模式如工厂模式、单例模式等,以及进行单元测试和集成测试。通过Mockito等工具模拟接口调用,可以帮助我们在不依赖真实服务器的情况下...

    Android 备忘录源码.zip项目安卓应用源码下载

    这个压缩包包含了构建一个Android备忘录应用程序的所有源代码,它主要使用Java语言编写,并可能涉及到Apache的相关开源库。 在Android应用开发中,备忘录应用是一个常见的实践项目,它能够帮助我们理解Android的...

    C#实现图片下载帮助类

    为了提高性能,可以考虑使用`HttpClient`的实例化策略,如使用单例模式,因为频繁创建和销毁`HttpClient`对象可能会导致问题。 9. **进度反馈**: 对于大图片,可以添加进度条功能,通过监听下载流的进度来更新UI...

    技術分享_RESTful Service with SSO Protection1

    在本文中,我们将深入探讨如何实现一个RESTful服务并结合单点登录(SSO)保护。RESTful服务是一种基于HTTP协议的、无状态的、面向资源的架构风格,用于构建可伸缩、易于维护的Web应用程序。而SSO允许用户在多个相互...

    android常用控件用法源码收集带详细注释

    在这个例子中,虽然没有实际使用,但通常可以创建一个 `SimpleDateFormat` 实例,如 `SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss")`,然后用 `format()` 方法将日期对象转换为指定格式的字符串。...

    基于C#的高仿QQ登录源码(包含设计模式源码)

    【标题】"基于C#的高仿QQ登录源码(包含设计模式源码)"揭示了这个项目的主要目标是创建一个使用C#编程语言实现的QQ登录界面的高仿版本,同时融入了设计模式的概念。这表明源码不仅提供了一个实际的用户界面实现,还...

    Angular 股票管理

    Angular 股票管理系统是一个基于前端Angular框架和后端Express.js构建的应用,旨在提供一个简单的股票数据展示平台。在这个项目中,用户可以查看股票信息,但无法进行编辑或添加操作,因为这些功能尚未与后端服务...

    android-移动应用开发技术教案共37页.pdf.zi

    Android UI设计是另一个重点,包括使用XML布局文件创建用户界面,理解各种View组件(如Button、TextView、ImageView)的用法,以及使用ConstraintLayout、RelativeLayout和LinearLayout等布局管理器。此外,还要学习...

    java经典代码

    例如,单例模式用于保证一个类只有一个实例,常用于配置管理或缓存服务;工厂模式则用于创建对象,提供了一种封装对象创建过程的方式;而观察者模式则用于对象间的事件通知,实现了发布-订阅模式。 在数据访问层,...

Global site tag (gtag.js) - Google Analytics