HttpClient的使用

Android,Http Socket 2017-07-30

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了?


本文由 方方無 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论

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