《第一行代码》学习笔记41-网络(2)

(Note: HttpClient has been deprecated.)

1.HttpClient是Apache提供的HTTP网络访问接口。

2.HttpClient可以完成和HttpURLConnection几乎一模一样的效果。
(1)HttpClient是一个接口,无法创建它的实例,通常情况下都会创建一个DefaultHttpClient的实例,如下:

HttpClient httpClient = new DefaultHttpClient();

(2)若要发起个GET请求,创建一个HttpGet对象,传入目标的网络地址,再调用HttpClient的execute()方法,如下:

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

(3)若要发起个POST请求,需要创建个HttpPost对象,并传入目标的网络地址,如下:

HttpPost httpPost = new HttpPost("http://www.baidu.com");

通过一个NameValuePair集合来存放待提交的参数,将这个参数集合传入到一个UrlEncodedFormEntity中,再调用
HttpPost的setEntity()方法将构建好的UrlEncodedFormEntity传入,如下:

List<NameValuePair> params = new ArrayList<NameValuePair>();
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);

(4)执行execute()方法后会返回个HttpResponse对象,服务 器返回的信息会包含在里面,通常情况下取出服务器返回的
状态码,等于200就说明请求和响应成功,如下:

if (httpResponse.getStatusLine().getStatusCode() == 200)  {
        //请求和响应成功
}

(5)在if判断的内部取出服务返回的具体内容,调用getEntity()方法获取到HttpEntity实例,再用EntityUtils.toString()这个
静态方法将HttpEntity转换成字符串,如下:

HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity);

3.注意!若服务器返回的数据是带有中文的,直接调用EntityUtils.toString()方法进行转换会有乱码的情况出现,这时只需
要在转换的时候将字符集指定成utf-8即可,如下:

String response = EntityUtils.toString(entity, "utf-8");
posted @ 2015-12-16 10:57  Iamasoldier6  阅读(193)  评论(0编辑  收藏  举报