Android--HttpURLConnection和HttpClient

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对象。发送出去。
      }
}
时间: 2024-08-23 23:12:43

Android--HttpURLConnection和HttpClient的相关文章

android httpurlconnection或者httpclient总是超时,服务器正常,但网络正常,浏览器可以上网

============问题描述============ HttpURLConnection conn = (HttpURLConnection) u.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setConnectTimeout(10000); conn.setRequestMethod("POST"); conn.setRequestProperty("Response-Typ

[转]Android访问网络,使用HttpURLConnection还是HttpClient

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12452307 最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient.我也比较好奇这么使用的原因,于是专门找到了一位Google的工程师写的一篇博客,文中对HttpURLConnection和HttpClient进行

Android访问网络,使用HttpURLConnection还是HttpClient?

最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient.我也比较好奇这么使用的原因,于是专门找到了一位Google的工程师写的一篇博客,文中对HttpURLConnection和HttpClient进行了对比,下面我就给大家简要地翻译一下. 原文地址:http://android-developers.blogspot.com/20

android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据

主要是基于HTTP协议与服务端进行交互. 涉及到的类和接口有:URL.HttpURLConnection.HttpClient等 URL: 使用一个String类型的url构造一个URL对象,如: URL url = new URL(http://10.0.2.2/index.php); openConnection()方法返回一个对指定url的资源的连接.返回类型是URLConnection,但是,由于这里我们一般用的是http协议,所以返回的实际是HttpURLConnection对象,故一

android中的HttpURLConnection和HttpClient实现app与pc数据交互

自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和HttpClient的区别吧,其实这2种都能进行客户端和服务器的数据交互,只是HttpClient封装的更完全. 先看下案例吧 第一种HttpURLConnection访问服务器: 客服端代码: package com.example.demo01; import java.io.IOExceptio

转-Android联网 — HttpURLConnection和HttpClient选择哪个好?

http://www.ituring.com.cn/article/199619?utm_source=tuicool 在Android开发中,访问网络我们是选择HttpURLConnection还是HttpClient好呢?这两种网络协议又有什么区别呢?下面我们就一起来look look. 1.HttpClient HttpClient拥有DefaultHttpClient和AndroidHttpClient两个具体的实现类,它们都有众多的API,而且实现比较稳定,bug数量也很少. 但也正是

Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例

前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后台服务器用Eclipse的JavaEE版最好的,但单就Tomcat来说(不写jsp之类的),本文下面的服务器方面操作在普通版的Eclipse也是可以的.我这里为了和ADT-bundle分开,特意重新安个JavaEE版的Eclipse.] 1.下载Eclipse的Tomcat插件:http://www

HttpURLConnection和HttpClient的区别

安卓中访问网络方式: Android应用程序都会使用HTTP协议来发送和接收网络数据,而Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient.这两种方式都支持HTTPS协议.以流的形式进行上传和下载.配置超时时间.IPv6.以及连接池等功能. 1.HttpClient: 优点:DefaultHttpClient和AndroidHttpClient都是HttpClient具体的实现类,都拥有众多的API,而且实现比较稳定,bug数量也很少.

关于安卓HTTP请求用HttpUrlConnection还是HttpClient好

转至http://blog.csdn.net/huzgd/article/details/8712187 安卓和JAVA应用开发少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient. 网上不少人都认为HttpClient更好,理由是功能更强,BUG更少,更容易控制细节.但我个人认为普通JAVA人员可选用HttpClient,安卓开发人员则应该使用HttpUrlConnection,理由如下: 1.

Android HttpURLConnection源码分析

Android HttpURLConnection源码分析 之前写过HttpURLConnection与HttpClient的区别及选择.后来又分析了Volley的源码. 最近又遇到了问题,想在Volley中针对HttpURLConnection添加连接池的功能,开始有点懵了,不知道HttpURLConnection要怎么加连接池, 虽然感觉这是没必要的,但是心底确拿不出依据.所以研究下HttpURLConnection的源码进行分析. 在使用的时候都是通过URL.openConnection(