标签:
webView控件,其hi就是向百度发送了一条HTTP请求,服务器返回百度首页的代码发送过来,webview调用浏览器的内核对它进行解析,呈现出来。
webview已经在后台帮我们处理好了发送HTTP请求、接受服务响应、解析返回数据、以及最终呈现页面这几部。封装的太好了。
四步掌握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发送请求、接收响应很简单,一般需要如下几步即可。
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