模拟发送Http请求我们可以使用HttpURLConnection类进行操作,但是Android平台集成了功能强大且编写更容易的commons-httpclient.jar,因此在这里介绍如何通过commons-httpclient进行Http请求。发送Http请求可以有两种方式:一种是同步,一种是异步。由于我对异步不是很熟悉,所以这里先提供同步方式发送Http请求:
1、使用Get方式发送
- 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;
- }
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方式发送
- 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;
- }
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
- 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;
- }
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、获得返回数据
- private String getData(InputStream inputStream) throws Exception
- {
- String data = "";
- //内存缓冲区
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- int len = -1;
- byte[] buff = new byte[1024];
- try
- {
- while((len=inputStream.read(buff))!=-1)
- {
- outputStream.write(buff, 0, len);
- }
- byte[] bytes = outputStream.toByteArray();
- data = new String(bytes);
- } catch (IOException e)
- {
- throw new Exception(e.getMessage(),e);
- }
- finally
- {
- outputStream.close();
- }
- return data;
- }
相关推荐
Android使用HttpClient发送请求、接收响应很简单,只要如下几步即可: Step1:创建HttpClient对象; Step2:如果需要发送GET请求,则创建HttpGet对象; 如果需要发送POST请求,则创建HttpPost对象; Step3:如果...
总之,了解如何使用`HttpClient`进行GET请求是Android开发的基础技能,但随着技术的发展,建议学习和使用更现代的网络库,以提升应用的效率和维护性。在实际项目中,务必考虑兼容性和最佳实践,以确保应用程序的稳定...
以上就是关于Android中通过GET和POST方式以及使用HttpClient框架进行网络通信的基本原理和实践步骤。理解这些概念和技巧对于构建功能丰富的Android应用程序至关重要。然而,随着技术的发展,开发者需要关注新的网络...
HttpClientUtil 是一个用于发送 HTTP 请求的工具类,主要支持 GET 和 POST 方法。它使用了 Apache HttpClient 库,这是一个强大的 Java 客户端编程工具包,用于处理 HTTP 协议。以下是对类中关键方法和概念的详细...
`HttpClient_Get_Post`这个压缩包可能包含了使用`HttpClient`发送GET和POST请求的Android代码示例,包括如何构造请求、设置参数、处理响应等内容。通过学习这些示例,开发者可以更好地理解和掌握`HttpClient`的用法...
总结来说,本项目通过具体的代码示例,深入浅出地介绍了Android中HTTPClient的使用,包括GET和POST请求的实现,以及文件上传的详细步骤。这对于任何需要进行网络通信的Android开发者来说,都是不可或缺的知识点。
在Android开发中,HttpClient是一个广泛使用的库,用于执行HTTP请求,比如GET、POST以及文件上传等操作。这个库特别适用于那些需要与Web服务进行交互的应用程序。本篇将详细讲解如何利用Apache HttpClient及其相关的...
本文将深入探讨这两种方法在Android中的应用,特别是`GET`和`POST`请求的实现,以及如何加载图片。 首先,我们来了解`Http`类,它是Android SDK内置的`java.net.HttpURLConnection`的简化版本。`GET`请求是HTTP中最...
本篇文章将深入解析`httpclient-4.3.6.jar`包,它是Android异步框架中一个重要的组件,对于理解网络请求的原理和提升应用性能具有重要意义。 HttpClient是一个强大的、高度可定制的HTTP客户端实现,它提供了丰富的...
在Android开发过程中,网络请求是不可或缺的一部分,而`HttpClient`是一个强大的HTTP客户端库,它允许开发者执行各种HTTP操作,如GET、POST、PUT和DELETE。本篇文章将详细讲解如何使用`HttpClient`工具类来简化这些...
- 使用POST时,注意不要将敏感数据直接暴露在URL中(GET请求中),因为GET请求的参数会被浏览器记录在历史记录和缓存中。 5. **异步处理**: - 在Android中,网络操作应在后台线程执行,避免阻塞UI。可以使用`...
1. **基本用法**:创建HttpClient实例,通过HttpGet或HttpPost对象构造请求,然后调用execute方法发送请求并获取HttpResponse。 2. **连接池管理**:使用PoolingHttpClientConnectionManager配置连接池,控制并发...
本篇文章将深入探讨Android HttpClient的基本使用方法,帮助开发者理解和应用这个工具。 首先,我们来了解HttpClient的核心组件: 1. **HttpClient实例**:这是所有操作的基础,通过`HttpClient client = new ...
- 发送HTTP请求:HttpClient库提供了发送GET、POST等请求的方法,并可以处理响应。 - 调用Web服务:ksoap2库帮助开发者与SOAP Web服务进行通信,通过构建和解析SOAP消息来调用服务方法。 - 日志记录: Commons ...
这个例子“android和httpclient结合”旨在帮助初学者理解如何在Android项目中集成和使用HttpClient进行网络请求。 首先,HttpClient是一个强大的、可扩展的HTTP客户端,支持多种HTTP协议版本,包括HTTP/1.1。它提供...
在Android系统中,HttpClient提供了一套完整的API,使得开发者能够方便地进行HTTP请求,发送POST、GET等方法,处理响应数据,以及实现Cookie管理、重定向等功能。 二、HttpClient在Android中的应用 1. 发起HTTP...
在这个"Android HttpClient源码"中,我们可以深入理解其内部工作原理,并学习如何在Android应用中有效地使用它。 首先,HttpClient的核心类是`HttpClient`,它是整个HTTP客户端操作的管理者。通过`HttpClient`,...
在Android平台上,`HttpClient`是Java的一个网络通信库,它为开发者提供了丰富的API来执行HTTP请求,包括GET、POST、PUT、DELETE等方法。在Android应用程序中,`HttpClient`经常被用于实现网络通信,比如上传或下载...
通过分析和运行这个示例,你将更深入地理解如何在Android中使用HttpClient进行代理下载。 总之,Android中的HttpClient虽然在新版本中被弃用,但它仍然是一种有效的工具,尤其是在处理复杂的网络请求和代理设置时。...