1、HttpClient比HttpURLConnection功能更强大,但是做java建议用前者,安卓建议用后者

2、这两者都支持HTTPS,streaming 上传与下载,配置超时时间,IPv6, 以及连接池。

3.区别

HttpClient是个很不错的开源框架,封装了访问http的请求头,参数,内容体,响应等等,

HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。

4、Android5.1之后就废止了HttpClient的相关Api

5、

在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任。但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面。在这种情况下,就需要涉及Session、Cookie的处理了,如果打算使用HttpURLConnection来处理这些细节,当然也是可能实现的,只是处理起来难度就大了。

HttpClient更方便更强大的解决了HttpURLConnection能做到或者不能做到的事情,HttpClient模块提供的两大类HttpPost和HttpGet实现Http请求:

HttpPost —— 传送的数据量较大,一般被默认为不受限制。一般用于发送一些表单数据,传输数据更安全

HttpGet —— 传送的数据量较小,不能大于2KB。一般用于请求获取一些信息,执行效率更高

6、

哪一种才是最好的?

在Android 2.2版本之前、HttpClient拥有较少的bug、因此使用它是最好的选择、而在Android 2.3版本及以后、HttpURLConnection则是最佳的选择、它的API简单、体积较小、因而非常适用于Android项目、压缩和缓存机制可以有效地减少网络访问的流量、在提升速度和省电方面也起到了较大的作用、对于新的应用程序应该更加偏向于使用HttpURLConnection、因为在以后的工作当中我们也会将更多的时间放在优化HttpURLConnection上面、其实我们也可以使用另外一个框架Volley

关于Volley

我们平时在开发Android应用的时候不可避免地都需要用到网络技术、而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据、Android系统中主要提供了两种方式来进行HTTP通信、HttpURLConnection和HttpClient、几乎在任何项目的代码中我们都能看到这两个类的身影、使用率非常高

不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的、如果不进行适当封装的话、很容易就会写出不少重复代码、于是乎、一些Android网络通信框架也就应运而生、比如说AsyncHttpClient、它把HTTP所有的通信细节全部封装在了内部、我们只需要简单调用几行代码就可以完成通信操作了、再比如Universal-Image-Loader、它使得在界面上显示网络图片的操作变得极度简单、开发者不用关心如何从网络上获取图片、也不用关心开启线程、回收图片资源等细节、Universal-Image-Loader已经把一切都做好了

Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化、于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley、Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身

既可以像AsyncHttpClient一样非常简单地进行HTTP通信、也可以像Universal-Image-Loader一样轻松加载网络上的图片、除了简单易用之外、Volley在性能方面也进行了大幅度的调整、它的设计目标就是非常适合去进行数据量不大、但通信频繁的网络操作、而对于大数据量的网络操作、比如说下载文件等、Volley的表现就会非常糟糕

下图所示的这些应用都是属于数据量不大、但网络通信频繁的、因此非常适合使用Volley

Volley主页:https://android.googlesource.com/platform/frameworks/volley

6、两种访问方式编码

使用HttpClient:

NameValuePair nameValuePair1 = newBasicNameValuePair("name", "yang");
NameValuePair nameValuePair2 = newBasicNameValuePair("pwd","123123");
List nameValuePairs = new ArrayList();
nameValuePairs.add(nameValuePair1);
nameValuePairs.add(nameValuePair2);
String validateURL = "http://10.0.2.2:8080/testhttp1/TestServlet";

try {

HttpParams httpParams = new BasicHttpParams();

HttpConnectionParams.setConnectionTimeout(httpParams,5000); //设置连接超时为5秒

HttpClient client = newDefaultHttpClient(httpParams); //生成一个http客户端发送请求对象

HttpPost httpPost = newHttpPost(urlString); //设定请求方式

if (nameValuePairs!=null&& nameValuePairs.size()!=0){
             //把键值对进行编码操作并放入HttpEntity对象中
             httpPost.setEntity(newUrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8));
          }

HttpResponse httpResponse =client.execute(httpPost); // 发送请求并等待响应

//判断网络连接是否成功
         if (httpResponse.getStatusLine().getStatusCode()!= 200) {
            System.out.println("网络错误异常!!!!");

returnfalse;
           }

HttpEntity entity = httpResponse.getEntity(); // 获取响应里面的内容
       inputStream = entity.getContent();  //得到服务气端发回的响应的内容(都在一个流里面)
       // 得到服务气端发回的响应的内容(都在一个字符串里面)
       // String strResult =EntityUtils.toString(entity);

}catch (Exception e) {
   System.out.println("这是异常!");
  }

使用HttpURLConnection:

String validateURL="http://10.0.2.2:8080/testhttp1/TestServlet?name=yang&pwd=123123";

try {

URL url = new URL(validateUrl); //创建URL对象

//返回一个URLConnection对象,它表示到URL所引用的远程对象的连接

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setConnectTimeout(5000); //设置连接超时为5秒

conn.setRequestMethod("GET"); //设定请求方式

conn.connect(); //建立到远程对象的实际连接

//返回打开连接读取的输入流

DataInputStreamdis = newDataInputStream(conn.getInputStream());

//判断是否正常响应数据

if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
          System.out.println("网络错误异常!!!!");

return false;
       }

} catch (Exception e) {
   e.printStackTrace();
  System.out.println("这是异常!");
  } finally {
    if (conn !=null) {
    conn.disconnect(); //中断连接
    }
 }

HttpURLConnection和HttpClient的区别2(转)的更多相关文章

  1. HttpURLConnection和HttpClient的区别(转)

    HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.在 JDK 的 java.net 包中已经提供了访问 ...

  2. android中的HttpURLConnection和HttpClient实现app与pc数据交互

    自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和H ...

  3. HttpClient和HttpURLConnection的使用和区别(下)

    转自来自点击打开链接 接着上一篇,我们继续来分析HttpURLConnection的使用,以及两者的共同点和区别. 目录 用法 HttpURLConnection 区别 引用资料 用法 HttpURL ...

  4. HttpClient和HttpURLConnection的使用和区别

    https://www.cnblogs.com/liushuibufu/p/4140913.html 功能用法对比 从功能上对比,HttpURLConnection比HttpClient库要丰富很多, ...

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

    HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等, HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便 HttpClient实 ...

  6. 转-Android联网 — HttpURLConnection和HttpClient选择哪个好?

    http://www.ituring.com.cn/article/199619?utm_source=tuicool 在Android开发中,访问网络我们是选择HttpURLConnection还是 ...

  7. HttpURLConnection和HttpClient

    HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.在 JDK 的 java.net 包中已经提供了访问 ...

  8. HttpURLConnection、HttpClient和Session

    原文地址:http://www.cnblogs.com/kross/p/3615695.html 一直没弄懂Session,cookies什么的登陆验证到底是怎么回事,昨天分别用HttpURLConn ...

  9. Android入门(二十)HttpURLConnection与HttpClient

    原文链接:http://www.orlion.ga/679/ 在 Android上发送 HTTP请求的方式一般有两种,HttpURLConnection和 HttpClient. 一.HttpURLC ...

随机推荐

  1. 网络构建入门技术(1)——IP概述

    说明(2017-5-10 11:02:31): 0. IP地址的作用,TCP/IP,网络层,包,源IP(哪个设备发出).目的IP(数据要发到哪个设备),每个设备需要唯一的一个IP地址.32个0到32个 ...

  2. 电商网站jQuery放大镜代码

    分享一款电商网站jQuery放大镜代码.这是一款基于jquery.elevatezoom插件实现的类似淘宝放大镜代码,提供40多种参数,可自由配置多种效果,适合电商或图片类网站使用.效果图如下: 在线 ...

  3. tongjiword,write / read file demo

    1.tong ji letter demo mport sys def tongjiword(): fi =open(paht,'r') cont=fi.read() wl={} for line i ...

  4. 使用EmbeddedValueResolverAware读取配置文件内容

    在基于Spring获取properties文件属性值的时候,一般使用@Value的方式注入配置文件属性值,但是总是需要引入这些多余的变量,有点不爽,今天研究了下,基于Spring解析@Value的方式 ...

  5. Linxu

    http://www.92csz.com/study/linux/ MySql 乱码  修改 /etc/my.cnf文件 character-set-server=utf8 , 表名不区分大小写:lo ...

  6. 【C】——extern

    直接上例子: 1.c #include<stdio.h> int main() { extern int a; a += ; printf("%d\n",a); tex ...

  7. ASP.NET Core 2.0使用Log4net实现记录日志功能

    一.安装Log4net 1.使用Nuget包进行安装 在依赖项上面右键,选择“管理NuGet程序包”,如下图所示: 在浏览界面输入log4net,然后点击安装,如下图所示: 2.使用程序包管理器控制台 ...

  8. Overview & PPT 类型 & PPT 制作流程

    PPT 策略 PPT 不能当讲稿 初次制作PPT的人常常把PPT当成大号讲稿,把演示时所有要说的话都变成文字做到PPT里,这 样的结果是观众很难记住PPT里到底讲了些什么需要我们帮助他们将文字尽可能转 ...

  9. CRNA的使用

    为了能让更多人感受 RN 的魅力,早在几个月前 React-community 就给出了一个不错的解决方案,可以让一个完全没接触过 RN 的人,从配环境开始5分钟实现 Hello Wolrd 的编写( ...

  10. Python __all__系统变量

    #__all__系统变量的使用 ''' __all__可以赋值一个字符串列表,列表中的元素表示外界调用该py文件可以使用的函数或者类 如果使用了__all__系统变量,并且调用该py文件使用的是fro ...