为什么使用apache-httpclient而不是jdk-urlconnection
来源:互联网 发布:怎么用iwatch解锁mac 编辑:程序博客网 时间:2024/06/05 02:17
urlconnection不能管理连接,比如:在交易网站中,用户余额查询,如果使用urlconnection可能照成频繁创建scoket,浪费资源,最后导致tomca没有反应,连个静态图片都打不开了,但是tomcat进程还依然存在,因此推荐使用httpclient,特性如下:
1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1
2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
3. 支持HTTPS协议。
4. 通过Http代理建立透明的连接。
5. 利用CONNECT方法通过Http代理建立隧道的https连接。
6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案。
7. 插件式的自定义认证方案。
8. 便携可靠的套接字工厂使它更容易的使用第三方解决方案。
9. 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。
10. 自动处理Set-Cookie中的Cookie。
11. 插件式的自定义Cookie策略。
12. Request的输出流可以避免流中内容直接缓冲到socket服务器。
13. Response的输入流可以有效的从socket服务器直接读取相应内容。
14. 在http1.0和http1.1中利用KeepAlive保持持久连接。
15. 直接获取服务器发送的response code和 headers。
16. 设置连接超时的能力。
17. 实验性的支持http1.1 response caching。
18. 源代码基于Apache License 可免费获取。具体httpclient封装如下:
package net.zkbc.p2p.fep.util.pay;import java.util.Map;public class WebUtils { public static String sendHttp(String url, Map<String, String> parameters) throws Exception { String outStr = ""; try { String charSet = "UTF-8"; String timeOut = "200000";// 自行配置 outStr = HttpClientHelper.doHttp(url, charSet, parameters, timeOut); if (outStr == null) { throw new Exception("请求接口失败!"); } } catch (Exception e) { e.printStackTrace(); throw new Exception("请求接口失败!"); } return outStr; }}
package net.zkbc.p2p.fep.util.pay;import java.io.IOException;import java.net.HttpURLConnection;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.NameValuePair;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.params.HttpMethodParams;public class HttpClientHelper {@SuppressWarnings("deprecation")public static String doHttp(String urlStr, String charSet,Map<String, String> parameters, String timeOut) throws Exception {String responseString = "";PostMethod xmlpost;int statusCode = 0;HttpClient httpclient = new HttpClient();httpclient.setConnectionTimeout(new Integer(timeOut).intValue());xmlpost = new PostMethod(urlStr);httpclient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, charSet);try {// 组合请求参数List<NameValuePair> list = new ArrayList<NameValuePair>();for (String key : parameters.keySet()) {NameValuePair nvp = new NameValuePair(key,String.valueOf(parameters.get(key)));list.add(nvp);}NameValuePair[] nvps = new NameValuePair[list.size()];xmlpost.setRequestBody(list.toArray(nvps));statusCode = httpclient.executeMethod(xmlpost);responseString = xmlpost.getResponseBodyAsString();if (statusCode < HttpURLConnection.HTTP_OK|| statusCode >= HttpURLConnection.HTTP_MULT_CHOICE) {System.err.println("失败返回码[" + statusCode + "]");throw new Exception("请求接口失败,失败码[ " + statusCode + " ]");}} catch (IOException e) {e.printStackTrace();System.err.println(e.toString());throw e;}return responseString;}}
- 为什么使用apache-httpclient而不是jdk-urlconnection
- HttpClient的使用以及jdk自带URLConnection的使用
- 为什么我们使用Nginx而不是Apache
- 为什么我们使用Nginx而不是Apache?
- 为什么我们使用Nginx而不是Apache?
- 为什么我们使用Nginx而不是Apache?
- URLConnection和HttpClient使用入门
- JDK中的URLConnection使用总结
- JDK中的URLConnection使用总结
- 使用URLConnection与HttpClient进行接口对接
- Java.net.URLConnection和Apache HTTPClient的主要区别对比
- Java.net.URLConnection和Apache HTTPClient的主要区别对比
- 为什么JDK源码中,无限循环大多使用for(;;)而不是while(true)?
- JDK中的URLConnection使用总结--转载
- JDK中URLConnection参数使用总结
- 为什么使用Qt而不是MFC
- 为什么使用ReLU而不是sigmoid
- 为什么使用PreparedStatement而不是Statement
- hdu 4812 树分治
- DFS HDU 1364
- BZOJ 1507 NOI2003 Editor Splay
- 将CString类型数据保存到txt文本文件中(Unicode下无乱码)
- mysql连接数据库的优化(一次连接多次使用)
- 为什么使用apache-httpclient而不是jdk-urlconnection
- Acdream 1213——Matrix Multiplication
- Python 抓取网页学习系列之一(网页编码格式)
- 取得套接字选项
- Servlet实现文件的下载
- Code::Blocks安装流程
- 我所读的书籍
- zoj 3229 有源汇上下界最大流
- HDU 1068 Girls and Boys 最大独立集 二分图匹配