HttpClient和HttpURLConnection

学习android有一段时间了,一开始的时候,学得很杂,比较混乱,在这里,我将对几种网络请求方式做一下个人阐述。

HttpClient、HttpURLConnection阐述

一般来说,我们通常用的网络请求有HttpClient、HttpURLConnection,那首先,这二者有什么区别呢?

  • HttpClient:
    在Android中,androidSDK中集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,并且它支持 HTTP 协议最新的版本和建议。使用HttpClient可以快速开发出功能强大的Http程序。
    其次:HttpClient是个很不错的开源框架,封装了访问http的请求头,参数,内容体,响应等等。DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具体的实现类,它们都拥有众多的API,而且实现比较稳定,bug数量也很少。但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。

  • HttpURLConnection:
    HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。

总述:HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。

具体使用

  • HttpClient使用
    -Get方式:
        // 用Get的方式请求
        HttpGet httpGet = new HttpGet(url);
        // 创建一个HttpClient对象用于发送请求
        HttpClient client = new DefaultHttpClient();
        try {
            // 调用client的execute发送一个请求,HttpResponse用于接收client执行httpGet返回的对象
            HttpResponse response = client.execute(httpGet);
            // 将response的结果码比较,查看是否是OK
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                // 通过EntityUtils获取到res0ponse响应中的内容
                HttpEntity entity = response.getEntity();
                String content = EntityUtils.toString(entity);
                Log.i("TAG", content);
        //      Toast.makeText(context, content, Toast.LENGTH_SHORT).show();
            }
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

-Post方式:

        // 创建HttpClient对象发送请求
        HttpClient client = new DefaultHttpClient();
        // 指定方式为post
        HttpPost httpPost = new HttpPost(url);
        // 在list中封装请求参数,通过NameValuePair存取数据
        List<NameValuePair> list = new ArrayList<NameValuePair>();
        list.add(new BasicNameValuePair("user_name", user_name));
        list.add(new BasicNameValuePair("pass_word", pass_word));
        try {
            // 将list放进httpPost实体中,即设置要发送的数据
            httpPost.setEntity(new UrlEncodedFormEntity(list));
            // 执行请求,并返回HttpResponse对象
            HttpResponse response = client.execute(httpPost);
            // 判断状态码
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                String content = EntityUtils.toString(response.getEntity());
                System.out.println(content);
            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
  • HttpURLConnection使用
        try {
            URL httpURL = new URL(url);
            // 打开指定URL
            HttpURLConnection conn = (HttpURLConnection) httpURL.openConnection();
            // 设置网页请求超时时间
            conn.setReadTimeout(5000);
            // 设置数据传递方式
            conn.setRequestMethod("GET");
            final StringBuffer sb = new StringBuffer();
            // 利用getInputStream()拿到读入流,即为指定url的内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String str;
            // 每次读取一行
            while ((str = reader.readLine()) != null) {
                // 将读入流的数据放在StringBuffer中保存
                sb.append(str);
            }

            handler.post(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    // 通过webView加载页面信息并展示
                    webView.loadData(sb.toString(), "text/html;charset=utf-8", null);
                }
            });
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值