HttpURLConnection与 HttpClient 区别/性能测试对比
ttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等,
HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便
HttpClient实际上是对Java提供方法的一些封装,
在HttpURLConnection中的输入输出流操作,
在这个接口中被统一封装成了HttpPost(HttpGet)和HttpResponse,
这样,就减少了操作的繁琐性。
性能方面这里做一个测试:
HttpURLConnection VS HttpClient性能测试
版本: HttpURLConnection jdk1.6;HttpClient 3.0.1
在项目中有一个特别小的相关应用,在选择时做了一下测试,之前先对两个类进行下说明:
HttpURLConnection java的标准类(java.net)
HttpClient Jakarta Commons HttpClient,提供对HTTP协议访问的封装,包括http的请求头,参数,内容体,响应等及多线程的应用。
测试代码:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class HttpClientTest { private static String link = "http://www.baidu.com"; public static void main(String[] args) { long a = System.currentTimeMillis(); useHttpURlConnection(); long b = System.currentTimeMillis(); System.out.println("use httpurlconnection: "+(b-a)); long c = System.currentTimeMillis(); useHttpClient(); long d = System.currentTimeMillis(); System.out.println("use httpclient: "+(d-c)); } public static void useHttpURlConnection(){ HttpURLConnection conn = null; URL url = null; String result = ""; try { url = new java.net.URL(link); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(10000); conn.connect(); InputStream urlStream = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(urlStream)); String s = ""; while ((s = reader.readLine()) != null) { result += s; } System.out.println(result); reader.close(); urlStream.close(); conn.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch(Exception e){ e.printStackTrace(); } } public static void useHttpClient(){ HttpClient client = new HttpClient(); GetMethod method = new GetMethod(link); method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: " + method.getStatusLine()); } byte[] responseBody = method.getResponseBody(); System.out.println(new String(responseBody)); } catch (HttpException e) { System.err.println("Fatal protocol violation: " + e.getMessage()); e.printStackTrace(); } catch (IOException e) { System.err.println("Fatal transport error: " + e.getMessage()); e.printStackTrace(); } finally { method.releaseConnection(); } } }
测试结果:
use httpurlconnection: 47
use httpclient: 641
结果很明显示,但是在实际应用中,还是应该根据实际的需求进行取舍。
相关文章:
HttpURLConnection和HTTPClient的比较,以及使用规则
HttpURLConnection与 HttpClient 区别/性能测试对比相关推荐
- (转)HttpURLConnection与 HttpClient 区别
转自: HttpURLConnection与 HttpClient 区别/性能测试对比 - 尚码园HttpURLConnection与HttpClient随笔 目前在工做中遇到的须要各类对接接口的工做 ...
- HttpURLConnection及HttpClient选择(转)
介绍Android中Http请求方式的选择.区别及几个常用框架对API的选择 1. 两种请求方式对比 Android Http请求API主要分两种: 第一种是Java的HttpURLConnectio ...
- HttpURLConnection与HttpClient提交FORM表单参数请求工具类
来吧,小宝贝!!!!!!一个小白在项目过程中遇到的问题,给你们分享一下哈!!!!! 先看下我们请求的方式与请求体: 不难看出哈,请求的参数体并没有什么难点,那我为什么还要做一下总结呢?真的可能因为我太 ...
- HttpURLConnection与HttpClient浅析---转
HttpURLConnection与HttpClient浅析 1. GET请求与POST请求 HTTP协议是现在Internet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HT ...
- Struts1和Struts2的区别和对比(完整版)
struts2不是struts1的升级,而是继承的webwork的血统,它吸收了struts1和webwork的优势. 先看struts的Action官方注释(struts1.3.8源代码) /** ...
- FreeSql与SqlSugar性能测试对比
这篇文章主要是对SqlSugar 做一次简单的性能测试对比.主要针对插入.批量插入.批量更新.读取性能的测试: 测试环境 1..net core 2.2 2.FreeSql 0.3.17 3.sqlS ...
- commons-httpclient 和 httpclient 区别
commons-httpclient 和 httpclient 区别 项目里的pom中,里面有这么两个包依赖. <dependency><groupId>commons-htt ...
- Android之访问网络,使用HttpURLConnection还是HttpClient?
<span style="font-family: Arial; font-size: 14px; background-color: rgb(255, 255, 255);" ...
- Struts1和Struts2的区别和对比(完整版)(转)
Struts1和Struts2的区别和对比(完整版)(转) Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一 ...
最新文章
- kafka删除topic
- 机器学习实战笔记(Python实现)-02-k近邻算法(kNN)
- SCD缓慢变化维拉链表
- Android Studio的Gradle插件文档
- lstm网络_LSTM(长短期记忆网络)
- 合作︱2018CCF青年精英大会首设科技创业竞赛,快来报名吧!
- 1227: [SDOI2009]虔诚的墓主人
- SAS 金融函数 PMT IRR
- ABAP OLE下载到EXCEL
- Microsoft Office SharePoint Server 2007案例实战开发
- 天正的计算机快捷命令大全,天正建筑快捷键命令大全 2
- 伪蒙特卡洛(Quasi-Monte Carlo, QMC)随机
- JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄
- 安卓应用安全指南 5.4.3 通过 HTTPS 的通信 高级话题
- 查询tian01\tian02\tian03总和
- Android 流式布局FlowLayout
- MT4-EA自动化交易研究笔记(2022-04-22)
- 05-数据科学的基础:数据收集之市场调查_01 市场调查概括
- js英雄对战小游戏 看看你的人品
- python 域名转IP
热门文章
- Nginx配置参数说明
- javascript获取asp.net后台代码的方法
- ORACLE 将SQL的执行脚本返回值传给SHELL
- Android使用READ_CONTACTS读取手机联系人
- selenium鼠标操作 包含右击和浮层菜单的选择
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 16—Recommender Systems 推荐系统...
- leetcode 	222 	Count Complete Tree Nodes
- android chrome iframe设置src属性无法启动app
- XCTF-高手进阶区:upload1
- JS:a=b=c,a=?