码迷,mamicode.com
首页 > 移动开发 > 详细

Android--HttpURLConnection和HttpClient

时间:2015-10-20 13:41:47      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

webview说在前面

webView控件,其hi就是向百度发送了一条HTTP请求,服务器返回百度首页的代码发送过来,webview调用浏览器的内核对它进行解析,呈现出来。

webview已经在后台帮我们处理好了发送HTTP请求、接受服务响应、解析返回数据、以及最终呈现页面这几部。封装的太好了。

HttpURLConnection

四步掌握httpURLConnection

1、获得HttpURLConnection的实例,一般只需new 出一个URL对象,并传入目标的网络地址。然后openConneciton()获得实例

URL url = new URL("http://www.baidu.com");
HttpURLConnection connect = (HttpURLConnection)url.openConnection();

 

2、设置请求使用的方法

Get表示希望从服务器那里获取数据。

Post表示则表示希望提交数据给服务器。

connect.setRequestMethod("GET");

 

接下来就有一些自由的定制了

连接超时,读取超时

connect.setConnectTimeout(8000);
connect.setReadTimeout(8000);

3、再调用getInputStream()就可以获取服务器返回的输入流了。剩下的任务是对输入流进行读取

InputStream in = connect.getInputStream();
...
...
...

 

4、关闭HTTP连接

connect.disconnect();

 

总结:发送HTTP请求-->时间长,子线程-->更新UI,异步消息处理机制(Message,handler)-->网络权限

如果要提交数据给服务器,其实也不复杂,只需要将HTTP的请求方法改成POST,并在获取输入流之前把数据写出即可。注意每条数据必须以键值对存在,数据与数据之间用&符号隔开

例:向服务器提交用户名和密码:

connect.setRequestMethod("POST");
DataOutputStream out = new DataOutputStream(connect.getOutputStream);
out.wtiteBytes("username=admin&password=123456");

 

HttpClient

使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。

1. 创建HttpClient对象。创建请求方法的实例,首先,它是一个接口,无法对它实例化。通常会创建一个DefaultHttpClient();

2. 指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,可调用setEntity(HttpEntity entity)方法来设置请求参数。

4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse

5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头

调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

6. 释放连接。无论执行方法是否成功,都必须释放连接

 

 

httpGet请求

    HttpClient httpClient = new DefaultHttpClient();

    HttpGet httpGet = new HttpPost("http://www.baidu.com"); 
    HttpRequest httpRequest = HttpClient.execute(httpGet);

httpPost请求

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action");  
        // 创建参数队列
        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");
        //将构建好的UrlEncodedFormEntity传入
        HttpPost.setEntity(entity);
        
        HttpRequest httpResponse = HttpClient.execute(HttpPost);

 

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

 

if(httpResponse.getStatusLine().getStatusCode()==200){
    //请求响应成功
     HttpEntity entity = response.getEntity();  
      if (entity != null) {  
          System.out.println("Response content: " + EntityUtils.toString(entity));  //如果有中文,这个会导致乱码。
          System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"));  
          //这里可以使用Message对象。发送出去。
      }  
}

 

Android--HttpURLConnection和HttpClient

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4894374.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!