在发出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可以很方便的请求Web API,下面这篇文章主要给大家介绍了关于.NET Core中使用HttpClient的正确姿势,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起学习学习吧
在使用 HttpClient 时,我们可以通过 setCookieStore 方法将 Cookie 添加到 HttpClient 中,这样在下次请求中,HttpClient 会自动携带 Cookie。但是,这种方法需要注意 Cookie 的路径、域名和过期时间等信息,如果不...
请商户的专业技术人员在使用时注意系统和软件的正确性和兼容性,以及带来的风险。 环境要求 Java 1.8+ 安装 最新版本已经在 发布。 Gradle 在你的build.gradle文件中加入如下的依赖 implementation '...
使用 HTTP Client 请求 HTTPS 的 API 时出现 The certificate cannot be verified up to a trusted certification authority 异常,并且证书已经传入。 下面就是问题代码: public class Program { public static...
主要给大家介绍了关于.NET Core中HttpClient的正确打开方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
概览 微信支付API v3的Apache HttpClient扩展,实现了请求签名的生成和...请商户的专业技术人员在使用时注意系统和软件的正确性和兼容性,以及带来的风险。 升级指引 若你使用的版本为0.3.0,升级前请参考升级指南。
这个文件夹在运行时可以在本地的Apache服务器上部署 也可以在真正的服务器上部署 不管在哪部署 部署以后 通过http: ip:8080 Myserver来访问 如果在本地的IE上能访问 说明可以正确使用 如果在本地的IE都不能访问 ...
Class-Path: ./lib/axis-ant.jar ./lib/axis.jar ./lib/commons-codec-1.3.jar ./lib/commons-discovery-0.2.jar ./lib/commons-httpclient-3.1.jar ./lib/commons-logging-1.0.4.jar ./lib/commons-logging-1.1.1....
请商户的专业技术人员在使用时注意系统和软件的正确性和兼容性,依旧带来的风险。环境要求Golang 1.12+安装运行go get -u github.com/wechatpay-apiv3/wechatpay-go或者在go.mod文件中添加require ( github . ...
用c#实现的文件上传客户端,能显示上传进度.程序能正确运行!
1.Ionic4 导航/路由的正确使用方式 2.Http vs HttpClient (我该使用原生的Http插件 还是 Angular 的 HttpClient 来发请求)? 3.Angular/ionic整合Echart 4.一个指令实现元素的可拖拽 5.整合一个简单好用的签名插件...
在 Java 中可使用 apache 的 HttpClient。 知识点六:跨域信息采集的风险 跨域信息采集存在一定的风险,例如如果使用 AJAX 方式跨域调用,可能会采集到恶意代码,例如 JS 木马,从而危害到网站的安全。 跨域页面...
身体关闭 bodyclose是一个静态分析工具,用于检查res.Body是否正确关闭。安装您可以通过go get命令获取bodyclose 。 $ go get -u github.com/timakin/bodyclose如何使用当Go为1.12或更高版本时, bodyclose使用go ...
我用了你家netcore 2.1下专门解决之前HttpClient口病已久的灵丹妙药了,信心满满的上线…..然后挂了,该超时的继续超 其中这个问题比较诡异在于超时的主要集中在两台机器上(俗称两兄弟了) 由于不明真相到底是什么...
含有jar包,直接运行没有错误,获取的天气预报绝对正确。好东西分当然高一点,绝对是你想找的。而且用的是HttpClient获取的,也可以学下HttpClient技术,有时候非常好用
AndroidAPIService##前言目前移动端去访问服务器的方式,除了比较古老的WebService方式,还有一种就是利用RESTfulAPI使用RESTfulAPI可以大大减低与服务器交互的复杂程度,这里本人做了一点小demo,供测试与服务器的...
注意:此存储库中的示例使用Dropbox API v1中的/ 1 / account / info端点,该端点已停用。 不过,OAuth 2实现仍可用于 。... 您还需要设置正确的OAuth 2回调URL(大多数示例为http://127.0.0.1:5000/callback为ht
描述使用酒店数据和AI来预测高价值客人和潜在的VIP客人。酒店可以利用预测结果来开展更有效的电子邮件营销活动,仅用有限的资源专注于正确的目标客户,并提供更好的客户体验。技术栈网络/前端角度11 Graphql 掌:...
用android在客户端向服务器上传图片时要经过Base64加密,否则图片乱码,不能正确显示。