首先:在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。
在Android中,androidSDK中集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,并且它支持 HTTP 协议最新的版本和建议。使用HttpClient可以快速开发出功能强大的Http程序。

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

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

HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。

使用HttpClient发送请求、接收响应很简单,只要如下几步即可:
1.创建HttpClient对象。
2.如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3.如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4.调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法返回一个HttpResponse。
5.调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

具体对比如下:HTTPClient

String url = "http://192.168.1.100:8080"; 
public HttpClientServer(){ } 
public String doGet(String username,String password){ 
   String getUrl = urlAddress + "?username="+username+"&password="+password; 
   HttpGet httpGet = new HttpGet(getUrl); 
   HttpParams hp = httpGet.getParams(); 
   hp.getParameter("true"); 
  //httpGet.setp 
  HttpClient hc = new DefaultHttpClient(); 
     try { 
     HttpResponse ht = hc.execute(httpGet); 
     if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ 
      HttpEntity he = ht.getEntity(); 
      InputStream is = he.getContent(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
      String response = ""; 
      String readLine = null; 
      while((readLine =br.readLine()) != null){ 
       //response = br.readLine(); 
      response = response + readLine; 
   } 
   is.close(); 
   br.close(); 
//String str = EntityUtils.toString(he); 
    return response; 
}else{ 
    return "error"; 
  } 
} catch (ClientProtocolException e) { 
   e.printStackTrace(); 
   return "exception"; 
} catch (IOException e) { 
   e.printStackTrace(); 
  return "exception"; 
  } 
}

public String doPost(String username,String password){ 
     //String getUrl = urlAddress + "?username="+username+"&password="+password; 
     HttpPost httpPost = new HttpPost(urlAddress); 
     List params = new ArrayList(); 
     NameValuePair pair1 = new BasicNameValuePair("username", username); 
     NameValuePair pair2 = new BasicNameValuePair("password", password); 
     params.add(pair1); 
     params.add(pair2); 
     HttpEntity he; 
     try { 
         he = new UrlEncodedFormEntity(params, "gbk"); 
         httpPost.setEntity(he); 
      } catch (UnsupportedEncodingException e1) { 
        e1.printStackTrace(); 
  }

HttpClient hc = new DefaultHttpClient(); 
      try { 
        HttpResponse ht = hc.execute(httpPost); 
       //连接成功 
       if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ 
       HttpEntity het = ht.getEntity(); 
       InputStream is = het.getContent(); 
       BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
       String response = ""; 
       String readLine = null; 
       while((readLine =br.readLine()) != null){ 
       //response = br.readLine(); 
      response = response + readLine; 
    } 
    is.close(); 
    br.close(); 
  //String str = EntityUtils.toString(he); 
     return response; 
  }else{ 
     return "error"; 
  } 
  } catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    return "exception"; 
  } catch (IOException e) { 
    e.printStackTrace(); 
    return "exception"; 
   } 
}

HttpURLConnection:

String url = "http://192.168.1.100:8080"; 
URL url; 
HttpURLConnection uRLConnection; 
public UrlConnectionToServer(){ }
//向服务器发送get请求
public String doGet(String username,String password){ 
String getUrl = urlAddress + "?username="+username+"&password="+password; 
try { 
url = new URL(getUrl); 
uRLConnection = (HttpURLConnection)url.openConnection(); 
InputStream is = uRLConnection.getInputStream(); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
String response = ""; 
String readLine = null; 
while((readLine =br.readLine()) != null){ 
//response = br.readLine(); 
response = response + readLine; 

is.close(); 
br.close(); 
uRLConnection.disconnect(); 
return response; 
} catch (MalformedURLException e) { 
e.printStackTrace(); 
returnnull; 
} catch (IOException e) { 
e.printStackTrace(); 
returnnull; 


//向服务器发送post请求
public String doPost(String username,String password){ 
try { 
url = new URL(urlAddress); 
uRLConnection = (HttpURLConnection)url.openConnection(); 
uRLConnection.setDoInput(true); 
uRLConnection.setDoOutput(true); 
uRLConnection.setRequestMethod("POST"); 
uRLConnection.setUseCaches(false); 
uRLConnection.setInstanceFollowRedirects(false); 
uRLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
uRLConnection.connect(); 
DataOutputStream out = new DataOutputStream(uRLConnection.getOutputStream()); 
String content = "username="+username+"&password="+password; 
out.writeBytes(content); 
out.flush(); 
out.close(); 
InputStream is = uRLConnection.getInputStream(); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
String response = ""; 
String readLine = null; 
while((readLine =br.readLine()) != null){ 
//response = br.readLine(); 
response = response + readLine; 

is.close(); 
br.close(); 
uRLConnection.disconnect(); 
return response; 
} catch (MalformedURLException e) { 
e.printStackTrace(); 
returnnull; 
} catch (IOException e) { 
  e.printStackTrace(); 
  returnnull; 
 } 
}

客户端操作:

String url = "http://192.168.1.102:8080"; 
String body = 
getContent(urlAddress); 
JSONArray array = new JSONArray(body); 
for(int i=0;i<array.length();i++) 

obj = array.getJSONObject(i); 
sb.append("用户名:").append(obj.getString("username")).append("\t"); 
sb.append("密码:").append(obj.getString("password")).append("\n");

HashMap<String, Object> map = new HashMap<String, Object>(); 
try { 
userName = obj.getString("username"); 
passWord = obj.getString("password"); 
} catch (JSONException e) { 
e.printStackTrace(); 

map.put("username", userName); 
map.put("password", passWord); 
listItem.add(map); 

} catch (Exception e) { 
e.printStackTrace(); 

if(sb!=null) 

showResult.setText("用户名和密码信息:"); 
showResult.setTextSize(20); 
} else
extracted(); 
//设置adapter 
SimpleAdapter simple = new SimpleAdapter(this,listItem, 
android.R.layout.simple_list_item_2, 
new String[]{"username","password"}, 
newint[]{android.R.id.text1,android.R.id.text2}); 
listResult.setAdapter(simple);

listResult.setOnItemClickListener(new OnItemClickListener() { 
@Override 
publicvoid onItemClick(AdapterView<?> parent, View view, 
int position, long id) { 
int positionId = (int) (id+1); 
Toast.makeText(MainActivity.this, "ID:"+positionId, Toast.LENGTH_LONG).show(); 

}); 

privatevoid extracted() { 
showResult.setText("没有有效的数据!"); 

//和服务器连接 
private String getContent(String url)throws Exception{ 
StringBuilder sb = new StringBuilder(); 
HttpClient client =new DefaultHttpClient(); 
HttpParams httpParams =client.getParams(); 
HttpConnectionParams.setConnectionTimeout(httpParams, 3000); 
HttpConnectionParams.setSoTimeout(httpParams, 5000); 
HttpResponse response = client.execute(new HttpGet(url)); 
HttpEntity entity =response.getEntity(); 
if(entity !=null){ 
BufferedReader reader = new BufferedReader(new InputStreamReader 
(entity.getContent(),"UTF-8"),8192); 
String line =null; 
while ((line= reader.readLine())!=null){ 
sb.append(line +"\n"); 

reader.close(); 

return sb.toString(); 
}

HTTPClient和URLConnection核心区别分析的更多相关文章

  1. C++中关于[]静态数组和new分配的动态数组的区别分析

    这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加 ...

  2. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  3. Oracle nvchar2和varchar2区别分析

    Oracle nvchar2和varchar2区别分析: [注意]VARCHAR2是Oracle提供的特定数据类型,Oracle可以保证VARCHAR2在任何版本中该数据类型都可以向上和向下兼容.VA ...

  4. jQuery中的.bind()、.live()和.delegate()之间区别分析

    jQuery中的.bind()..live()和.delegate()之间区别分析,学习jquery的朋友可以参考下.   DOM树   首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的 ...

  5. jQuery中的bind() live() delegate()之间区别分析

    jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click', ...

  6. addEventListener()及attachEvent()区别分析

    Javascript 的addEventListener()及attachEvent()区别分析 Mozilla中: addEventListener的使用方式: target.addEventLis ...

  7. C# Parse和Convert的区别分析

    原文:C# Parse和Convert的区别分析 大家都知道在进行类型转换的时候有连个方法供我们使用就是Convert.to和*.Parse,但是疑问就是什么时候用C 什么时候用P 通俗的解释大家都知 ...

  8. Zepto源码分析(一)核心代码分析

    本文只分析核心的部分代码,并且在这部分代码有删减,但是不影响代码的正常运行. 目录 * 用闭包封装Zepto * 开始处理细节 * 正式处理数据(获取选择器选择的DOM) * 正式处理数据(添加DOM ...

  9. jquery中attr和prop的区别分析

    这篇文章主要介绍了jquery中attr和prop的区别分析的相关资料,需要的朋友可以参考下 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别 ...

随机推荐

  1. android如何让service不被杀死-提高进程优先级

    1.在service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建 @Override public int onStartCommand ...

  2. Ubuntu: 搭建tftp,nfs服务器

    Ubuntu12.04搭建tftp&nfs服务器 http://blog.163.com/thinki_cao/blog/static/83944875201411610467306/ 硬件环 ...

  3. redis安装及数据类型简介(string、list、set、sorted_set、hash)

    一:简介: redis国内最大的案例--->新浪微博 memcache:是key-value数据库 数据类型:只支持key value数据 过期策略:支持 持久化:不支持(可以通过三方程序) 主 ...

  4. 03-IOSCore - XML及解析、Plist

    一.XML 可扩展标记语言 是什么?是一段有规范的字符串, 用在哪?用在任何地方 语法: * 结点Node <结点名 属性名="属性值"> 结点内容 </结点名& ...

  5. 使用jQuery的attr方法来修改onclick值

    这篇文章主要介绍了通过jQuery的attr修改onclick值的解决方法 ,需要的朋友可以参考下 var js = "alert('B:' + this.id); return false ...

  6. 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编

    在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编 ...

  7. mysql 行锁排查

    <pre name="code" class="html">mysql 锁表: 隔离级别使用RR: mysql> SELECT @@GLOBA ...

  8. Outlook Express 收发邮件出现&quot;0x800CCC0F&quot;错误代码解决方法

    非常多网友在使用Outlook Express收发邮件的过程中,有时能够发送邮件,但出现不能接收信件的问题.每次在收邮件都会在某个地方停止不动,然后报超时,出现错误代码0x800CCC19或0x800 ...

  9. apache一键安装脚本

    近期在玩apache,首先安装apace要配置apr.apr-util,pcre,而配置这些基本都是千篇一律.所谓程序猿的精神就是降低反复性的劳动,以下请看我写的apache安装脚本: 这个脚本我也放 ...

  10. 高仿114la网址导航源码完整最新版

    给大家本人我精心模仿的高仿114la网址导航源码,我们都知道114la网址导航的影响力,喜欢的朋友可以下载学习一下.  由于文件较大,没有上传了,下载地址在下面有的. 附源码下载: 114la网站导航 ...