博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpURLConnection与 HttpClient 区别/性能测试对比
阅读量:6196 次
发布时间:2019-06-21

本文共 3947 字,大约阅读时间需要 13 分钟。

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

 

结果很明显示,但是在实际应用中,还是应该根据实际的需求进行取舍。

相关文章:

转载地址:http://kcjca.baihongyu.com/

你可能感兴趣的文章
“智慧青岛”里的海信力量
查看>>
mycelipse2014/2015激活工具和教程
查看>>
《赛迪机器人3·15报告》揭示机器人产品质量6大痛点
查看>>
Hive部署
查看>>
beego高级编程---->grace模块热重启导致旧进程未处理完请求直接退出
查看>>
Linux CPU
查看>>
SPFA 算法详解
查看>>
SQL注入攻击原理以及基本方法
查看>>
Application的使用
查看>>
Linux用户管理(十)Linux Shell高级
查看>>
vmware10密钥
查看>>
curl上传图片的大坑
查看>>
用户态和内核态简析
查看>>
NancyFx 2.0的开源框架的使用-AspnetBootstrapping
查看>>
Netty In Action中文版 - 第十六章:从EventLoop取消注册和重新注册
查看>>
ERP选型及心得
查看>>
awk报告生成器
查看>>
Mysql多实例运行
查看>>
Python的pass语句
查看>>
inotifywait
查看>>