标签 拓展 下的文章

HttpClient的使用


HttpClient由apache提供

HttpClient是 Apache 提供的 HTTP 网络访问接口,它可以完成和 HttpURLConnection 几乎一模一样的效果,但两者之间的用法却有较大的差别。

首先你需要知道,HttpClient 是一个接口,因此无法创建它的实例,通常情况下都会创
建一个 DefaultHttpClient 的实例,如下所示:

HttpClient httpClient = new DefaultHttpClient();

接下来如果想要发起一条 GET 请求,就可以创建一个 HttpGet 对象,并传入目标的网络
地址,然后调用 HttpClient 的 execute()方法即可:

   HttpGet httpGet = new HttpGet("http://www.baidu.com");
   httpClient.execute(httpGet);

如果是发起一条 POST 请求会比 GET 稍微复杂一点,我们需要创建一个 HttpPost 对象,
并传入目标的网络地址,如下所示:
HttpPost httpPost = new HttpPost("http://www.baidu.com");
然后通过一个 NameValuePair 集合来存放待提交的参数,并将这个参数集合传入到一个
UrlEncodedFormEntity 中,然后调用 HttpPost 的 setEntity()方法将构建好的 UrlEncodedFormEntity
传入,如下所示:
List params = new ArrayList();
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "123456"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
httpPost.setEntity(entity);
接下来的操作就和 HttpGet 一样了,调用 HttpClient 的 execute()方法,并将 HttpPost 对
象传入即可:
httpClient.execute(httpPost);


执行 execute()方法之后会返回一个 HttpResponse 对象,服务器所返回的所有信息就会包
含在这里面。通常情况下我们都会先取出服务器返回的状态码,如果等于 200 就说明请求和响应都成功了,如下所示:
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 请求和响应都成功了
}

接下来在这个 if 判断的内部取出服务返回的具体内容,可以调用 getEntity()方法获取到
一个 HttpEntity 实例,然后再用 EntityUtils.toString()这个静态方法将 HttpEntity 转换成字符串
即可,如下所示:
HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity);
注意如果服务器返回的数据是带有中文的,直接调用 EntityUtils.toString()方法进行转换
会有乱码的情况出现,这个时候只需要在转换的时候将字符集指定成 utf-8 就可以了,如下
所示:
String response = EntityUtils.toString(entity, "utf-8");

不熟悉可以用HttpURLConnection

Android 2.3版本及以后,HttpURLConnection是最佳的选择。它的API简单,体积较小等优点
谷歌已经不推荐用HttpClient了?


shijiebei 365bet manbetx 188bet xinshui caipiao 95zz tongbaoyule beplay 88bifa 18luck betway bwin hg0088 aomenjinshayulecheng ca88 shenbotaiyangcheng vwin w88 weide