HTTPClient和URLConnection核心区别分析

来源:互联网 发布:易语言十字准星源码 编辑:程序博客网 时间:2024/05/22 12:33
首先:在 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); } elseextracted(); //设置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(); }


0 0
原创粉丝点击