`

Android使用httpClient进行Post和Get发送参数 .

 
阅读更多

模拟发送Http请求我们可以使用HttpURLConnection类进行操作,但是Android平台集成了功能强大且编写更容易的commons-httpclient.jar,因此在这里介绍如何通过commons-httpclient进行Http请求。发送Http请求可以有两种方式:一种是同步,一种是异步。由于我对异步不是很熟悉,所以这里先提供同步方式发送Http请求:

1、使用Get方式发送

  1. public String httpGet(String url, String params) throws Exception   
  2.     {   
  3.         String response = null//返回信息    
  4.         if (null!=params&&!params.equals(""))   
  5.         {   
  6.             url += "?" + params;   
  7.         }   
  8.         // 构造HttpClient的实例    
  9.         HttpClient httpClient = new HttpClient();   
  10.         // 创建GET方法的实例    
  11.         GetMethod httpGet = new GetMethod(url);   
  12.         // 设置超时时间    
  13.         httpGet.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, new Integer(CONNECTION_TIMEOUT));   
  14.         try  
  15.         {   
  16.             int statusCode = httpClient.executeMethod(httpGet);   
  17.             if (statusCode == HttpStatus.SC_OK) //SC_OK = 200    
  18.             {   
  19.                 InputStream inputStream = httpGet.getResponseBodyAsStream(); //获取输出流,流中包含服务器返回信息    
  20.                 response = getData(inputStream);//获取返回信息    
  21.             }   
  22.             else  
  23.             {   
  24.                 LOG.debug("Get Method Statuscode : "+statusCode);   
  25.             }   
  26.         } catch (Exception e)   
  27.         {   
  28.             throw new Exception(e);   
  29.         } finally  
  30.         {   
  31.             httpGet.releaseConnection();   
  32.             httpClient = null;   
  33.         }   
  34.         return response;   
  35.     }   
public String httpGet(String url, String params) throws Exception 
    { 
        String response = null; //返回信息 
        if (null!=params&&!params.equals("")) 
        { 
            url += "?" + params; 
        } 
        // 构造HttpClient的实例 
        HttpClient httpClient = new HttpClient(); 
        // 创建GET方法的实例 
        GetMethod httpGet = new GetMethod(url); 
        // 设置超时时间 
        httpGet.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, new Integer(CONNECTION_TIMEOUT)); 
        try
        { 
            int statusCode = httpClient.executeMethod(httpGet); 
            if (statusCode == HttpStatus.SC_OK) //SC_OK = 200 
            { 
                InputStream inputStream = httpGet.getResponseBodyAsStream(); //获取输出流,流中包含服务器返回信息 
                response = getData(inputStream);//获取返回信息 
            } 
            else
            { 
                LOG.debug("Get Method Statuscode : "+statusCode); 
            } 
        } catch (Exception e) 
        { 
            throw new Exception(e); 
        } finally
        { 
            httpGet.releaseConnection(); 
            httpClient = null; 
        } 
        return response; 
    } 


 

2、使用Post方式发送

  1. public String httpPost(String url, List<Parameter> params) throws Exception   
  2.     {   
  3.         String response = null;   
  4.         HttpClient httpClient = new HttpClient();   
  5.         PostMethod httpPost = new PostMethod(url);   
  6.         //Post方式我们需要配置参数    
  7.         httpPost.addParameter("Connection""Keep-Alive");   
  8.         httpPost.addParameter("Charset""UTF-8");   
  9.         httpPost.addParameter("Content-Type""application/x-www-form-urlencoded");   
  10.         httpPost.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, new Integer(CONNECTION_TIMEOUT));   
  11.         if (null!=params&¶ms.size()!=0)   
  12.         {   
  13.             //设置需要传递的参数,NameValuePair[]    
  14.             httpPost.setRequestBody(buildNameValuePair(params));   
  15.         }   
  16.         try  
  17.         {   
  18.             int statusCode = httpClient.executeMethod(httpPost);   
  19.             if (statusCode == HttpStatus.SC_OK)   
  20.             {   
  21.                 InputStream inputStream = httpPost.getResponseBodyAsStream();   
  22.                 response = getData(inputStream);   
  23.             }   
  24.             else  
  25.             {   
  26.                 LOG.debug("Post Method Statuscode : "+statusCode);   
  27.             }   
  28.         } catch (Exception e)   
  29.         {   
  30.             throw new Exception(e);   
  31.         } finally  
  32.         {   
  33.             httpPost.releaseConnection();   
  34.             httpClient = null;   
  35.         }   
  36.         return response;   
  37.     }   
public String httpPost(String url, List<Parameter> params) throws Exception 
    { 
        String response = null; 
        HttpClient httpClient = new HttpClient(); 
        PostMethod httpPost = new PostMethod(url); 
        //Post方式我们需要配置参数 
        httpPost.addParameter("Connection", "Keep-Alive"); 
        httpPost.addParameter("Charset", "UTF-8"); 
        httpPost.addParameter("Content-Type", "application/x-www-form-urlencoded"); 
        httpPost.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, new Integer(CONNECTION_TIMEOUT)); 
        if (null!=params&¶ms.size()!=0) 
        { 
            //设置需要传递的参数,NameValuePair[] 
            httpPost.setRequestBody(buildNameValuePair(params)); 
        } 
        try
        { 
            int statusCode = httpClient.executeMethod(httpPost); 
            if (statusCode == HttpStatus.SC_OK) 
            { 
                InputStream inputStream = httpPost.getResponseBodyAsStream(); 
                response = getData(inputStream); 
            } 
            else
            { 
                LOG.debug("Post Method Statuscode : "+statusCode); 
            } 
        } catch (Exception e) 
        { 
            throw new Exception(e); 
        } finally
        { 
            httpPost.releaseConnection(); 
            httpClient = null; 
        } 
        return response; 
    } 


3、构件NameValuePair

  1. private NameValuePair[] buildNameValuePair(List<Parameter> params)   
  2.     {   
  3.         int size = params.size();   
  4.         NameValuePair[] pair = new NameValuePair[size];   
  5.         for(int i = 0 ;i<size;i++)   
  6.         {   
  7.             Parameter param = params.get(i);   
  8.             pair[i] = new NameValuePair(param.getName(),param.getValue());   
  9.         }   
  10.         return pair;   
  11.     }   
private NameValuePair[] buildNameValuePair(List<Parameter> params) 
    { 
        int size = params.size(); 
        NameValuePair[] pair = new NameValuePair[size]; 
        for(int i = 0 ;i<size;i++) 
        { 
            Parameter param = params.get(i); 
            pair[i] = new NameValuePair(param.getName(),param.getValue()); 
        } 
        return pair; 
    } 


4、获得返回数据

  1. private String getData(InputStream inputStream) throws Exception   
  2.     {   
  3.         String data = "";   
  4.         //内存缓冲区    
  5.         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();   
  6.         int len = -1;   
  7.         byte[] buff = new byte[1024];   
  8.         try  
  9.         {   
  10.             while((len=inputStream.read(buff))!=-1)   
  11.             {   
  12.                 outputStream.write(buff, 0, len);   
  13.             }   
  14.             byte[] bytes = outputStream.toByteArray();   
  15.             data = new String(bytes);   
  16.         } catch (IOException e)   
  17.         {   
  18.             throw new Exception(e.getMessage(),e);   
  19.         }   
  20.         finally  
  21.         {   
  22.             outputStream.close();   
  23.         }   
  24.         return data;   
  25.     }   
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android_HttpClient_jar包

    Android使用HttpClient发送请求、接收响应很简单,只要如下几步即可: Step1:创建HttpClient对象; Step2:如果需要发送GET请求,则创建HttpGet对象; 如果需要发送POST请求,则创建HttpPost对象; Step3:如果...

    Http(get)请求数据Android Studio使用HttpClient

    总之,了解如何使用`HttpClient`进行GET请求是Android开发的基础技能,但随着技术的发展,建议学习和使用更现代的网络库,以提升应用的效率和维护性。在实际项目中,务必考虑兼容性和最佳实践,以确保应用程序的稳定...

    Android中通过GET和POST方式以及使用HttpClient框架通过网络通信提交参数给web应用案例

    以上就是关于Android中通过GET和POST方式以及使用HttpClient框架进行网络通信的基本原理和实践步骤。理解这些概念和技巧对于构建功能丰富的Android应用程序至关重要。然而,随着技术的发展,开发者需要关注新的网络...

    http请求工具类HttpClientUtil,get,post请求(csdn)————程序.pdf

    HttpClientUtil 是一个用于发送 HTTP 请求的工具类,主要支持 GET 和 POST 方法。它使用了 Apache HttpClient 库,这是一个强大的 Java 客户端编程工具包,用于处理 HTTP 协议。以下是对类中关键方法和概念的详细...

    Android-Httpclient_Get_Post

    `HttpClient_Get_Post`这个压缩包可能包含了使用`HttpClient`发送GET和POST请求的Android代码示例,包括如何构造请求、设置参数、处理响应等内容。通过学习这些示例,开发者可以更好地理解和掌握`HttpClient`的用法...

    android httpclient文件上传 http协议post get方法向服务器传输数据

    总结来说,本项目通过具体的代码示例,深入浅出地介绍了Android中HTTPClient的使用,包括GET和POST请求的实现,以及文件上传的详细步骤。这对于任何需要进行网络通信的Android开发者来说,都是不可或缺的知识点。

    Android HttpClient用到的jar包

    在Android开发中,HttpClient是一个广泛使用的库,用于执行HTTP请求,比如GET、POST以及文件上传等操作。这个库特别适用于那些需要与Web服务进行交互的应用程序。本篇将详细讲解如何利用Apache HttpClient及其相关的...

    android中Http和HttpClient的Get和Post方法的使用

    本文将深入探讨这两种方法在Android中的应用,特别是`GET`和`POST`请求的实现,以及如何加载图片。 首先,我们来了解`Http`类,它是Android SDK内置的`java.net.HttpURLConnection`的简化版本。`GET`请求是HTTP中最...

    httpclient-4.3.6.jar包,安卓异步框架必备

    本篇文章将深入解析`httpclient-4.3.6.jar`包,它是Android异步框架中一个重要的组件,对于理解网络请求的原理和提升应用性能具有重要意义。 HttpClient是一个强大的、高度可定制的HTTP客户端实现,它提供了丰富的...

    Android-HttpClient工具类简单轻松的实现getpostput和delete请求

    在Android开发过程中,网络请求是不可或缺的一部分,而`HttpClient`是一个强大的HTTP客户端库,它允许开发者执行各种HTTP操作,如GET、POST、PUT和DELETE。本篇文章将详细讲解如何使用`HttpClient`工具类来简化这些...

    Android通过POST和GET向服务器发送数据

    - 使用POST时,注意不要将敏感数据直接暴露在URL中(GET请求中),因为GET请求的参数会被浏览器记录在历史记录和缓存中。 5. **异步处理**: - 在Android中,网络操作应在后台线程执行,避免阻塞UI。可以使用`...

    httpclient-4.5所需jar包.zip

    1. **基本用法**:创建HttpClient实例,通过HttpGet或HttpPost对象构造请求,然后调用execute方法发送请求并获取HttpResponse。 2. **连接池管理**:使用PoolingHttpClientConnectionManager配置连接池,控制并发...

    Android HttpClient工具类

    本篇文章将深入探讨Android HttpClient的基本使用方法,帮助开发者理解和应用这个工具。 首先,我们来了解HttpClient的核心组件: 1. **HttpClient实例**:这是所有操作的基础,通过`HttpClient client = new ...

    android和httpclient结合的例子

    这个例子“android和httpclient结合”旨在帮助初学者理解如何在Android项目中集成和使用HttpClient进行网络请求。 首先,HttpClient是一个强大的、可扩展的HTTP客户端,支持多种HTTP协议版本,包括HTTP/1.1。它提供...

    Android_HttpClient_jar包+HttpClientJarAndSource

    在Android系统中,HttpClient提供了一套完整的API,使得开发者能够方便地进行HTTP请求,发送POST、GET等方法,处理响应数据,以及实现Cookie管理、重定向等功能。 二、HttpClient在Android中的应用 1. 发起HTTP...

    Android HttpClient源码

    在这个"Android HttpClient源码"中,我们可以深入理解其内部工作原理,并学习如何在Android应用中有效地使用它。 首先,HttpClient的核心类是`HttpClient`,它是整个HTTP客户端操作的管理者。通过`HttpClient`,...

    android HttpClient

    在Android平台上,`HttpClient`是Java的一个网络通信库,它为开发者提供了丰富的API来执行HTTP请求,包括GET、POST、PUT、DELETE等方法。在Android应用程序中,`HttpClient`经常被用于实现网络通信,比如上传或下载...

    Android Httpclient Proxy Test

    通过分析和运行这个示例,你将更深入地理解如何在Android中使用HttpClient进行代理下载。 总之,Android中的HttpClient虽然在新版本中被弃用,但它仍然是一种有效的工具,尤其是在处理复杂的网络请求和代理设置时。...

    HttpClient for android 4 3 5 jar

    在Android中,HttpClient库提供了与Web服务器进行HTTP通信的能力,支持各种HTTP方法(如GET、POST等),以及处理cookies、重定向、认证等功能。这个"HttpClient for android 4.3.5 jar"包含了两个文件:`httpclient-...

Global site tag (gtag.js) - Google Analytics