首页 > 代码库 > HttpURLConnection与 HttpClient 区别/性能测试对比

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的请求头,参数,内容体,响应等及多线程的应用。

 

测试代码:

Java代码  收藏代码
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.io.InputStreamReader;  
  5. import java.net.HttpURLConnection;  
  6. import java.net.MalformedURLException;  
  7. import java.net.URL;  
  8.   
  9. import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;  
  10. import org.apache.commons.httpclient.HttpClient;  
  11. import org.apache.commons.httpclient.HttpException;  
  12. import org.apache.commons.httpclient.HttpStatus;  
  13. import org.apache.commons.httpclient.methods.GetMethod;  
  14. import org.apache.commons.httpclient.params.HttpMethodParams;  
  15.   
  16. public class HttpClientTest {  
  17.   
  18.     private static String link = "http://www.baidu.com";  
  19.   
  20.     public static void main(String[] args) {  
  21.         long a = System.currentTimeMillis();  
  22.         useHttpURlConnection();  
  23.         long b = System.currentTimeMillis();  
  24.         System.out.println("use httpurlconnection: "+(b-a));  
  25.         long c = System.currentTimeMillis();  
  26.         useHttpClient();  
  27.         long d = System.currentTimeMillis();  
  28.         System.out.println("use httpclient: "+(d-c));  
  29.     }  
  30.       
  31.     public static void useHttpURlConnection(){  
  32.         HttpURLConnection conn = null;  
  33.         URL url = null;  
  34.         String result = "";  
  35.         try {  
  36.             url = new java.net.URL(link);  
  37.             conn = (HttpURLConnection) url.openConnection();  
  38.             conn.setConnectTimeout(10000);  
  39.             conn.connect();  
  40.   
  41.             InputStream urlStream = conn.getInputStream();  
  42.             BufferedReader reader = new BufferedReader(new InputStreamReader(urlStream));  
  43.             String s = "";  
  44.             while ((s = reader.readLine()) != null) {  
  45.                 result += s;  
  46.             }  
  47.             System.out.println(result);  
  48.             reader.close();  
  49.             urlStream.close();  
  50.             conn.disconnect();  
  51.         } catch (MalformedURLException e) {  
  52.             e.printStackTrace();  
  53.         } catch (IOException e) {  
  54.             e.printStackTrace();  
  55.         } catch(Exception e){  
  56.             e.printStackTrace();  
  57.         }  
  58.     }  
  59.   
  60.     public static void useHttpClient(){  
  61.         HttpClient client = new HttpClient();  
  62.         GetMethod method = new GetMethod(link);  
  63.         method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  
  64.                 new DefaultHttpMethodRetryHandler(3, false));  
  65.         try {  
  66.             int statusCode = client.executeMethod(method);  
  67.   
  68.             if (statusCode != HttpStatus.SC_OK) {  
  69.                 System.err.println("Method failed: " + method.getStatusLine());  
  70.             }  
  71.             byte[] responseBody = method.getResponseBody();  
  72.             System.out.println(new String(responseBody));  
  73.         } catch (HttpException e) {  
  74.             System.err.println("Fatal protocol violation: " + e.getMessage());  
  75.             e.printStackTrace();  
  76.         } catch (IOException e) {  
  77.             System.err.println("Fatal transport error: " + e.getMessage());  
  78.             e.printStackTrace();  
  79.         } finally {  
  80.             method.releaseConnection();  
  81.         }  
  82.     }  
  83. }  

 

测试结果:

use httpurlconnection: 47

use httpclient: 641

 

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

相关文章:

HttpURLConnection和HTTPClient的比较,以及使用规则

HttpURLConnection与 HttpClient 区别/性能测试对比