zoukankan      html  css  js  c++  java
  • HTTPClient和URLConnection核心区别分析

    首先:在 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(" "); 
    sb.append("密码:").append(obj.getString("password")).append(" "); 

    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 +" "); 

    reader.close(); 

    return sb.toString(); 
    }

  • 相关阅读:
    蜘蛛禁止访问文件
    基于PhalApi的Smarty拓展 (视图层的应用)
    MySQL数据库存表情
    查看PHP版本等相关信息
    读取数据库表信息
    nginx简介
    Redis发布订阅
    Redis持久化
    Redis主从复制
    Redis的Java客户端Jedis
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3244002.html
Copyright © 2011-2022 走看看