HttpURLConnection,HttpClient的简单使用

小编 2026-07-01 阅读:1396 评论:0
HttpURLConnection在android 2.2及以下版本中HttpUrlConnection存在着一些bug(建议使用HttpClient) 建议在android 2.3以后使用HttpUrlConnection特点• 比较轻...

HttpURLConnection

在android 2.2及以下版本中HttpUrlConnection存在着一些bug(建议使用HttpClient) 建议在android 2.3以后使用HttpUrlConnection

特点

• 比较轻便,灵活,易于扩展

• 在3.0后以及4.0中都进行了改善,如对HTTPS的支持

• 在4.0中,还增加了对缓存的支持


HttpClient(不推荐使用了)

特点

• 高效稳定,但是维护成本高昂,故android 开发团队不愿意在维护该库而是转投更为轻便的

在android2.3之后就被HttpUrlConnection取代了


OK,扯了这么多,直接开始实战。

前期准备

开发工具:Eclipse(ADT Build: v22.6.2-1085508) 开发环境:OS X EI Capitan 版本 10.11.5 搭建一个本地的测试服务用来测试访问 首先安装MAMP,用来部署测试数据:

Paste_Image.png

传送门:https://www.mamp.info/en/

配置端口

Paste_Image.png

文件部署目录

Paste_Image.png

Paste_Image.png

get_data.json文件从项目Assets目录下获取

Paste_Image.png

OK,前期准备工作完毕。

代码演示

源码地址 https://github.com/andli0626/HttpClientAndHttpUrlConnection.git 实际效果

Paste_Image.png

HttpURLConnection请求:GET 核心代码

  private void sendRequestWithHttpURLConnection() {
    // 开启线程来发起网络请求
    new Thread(new Runnable() {
     @Override
     public void run() {
      HttpURLConnection connection = null;
      try {
       // 获得URL对象
       URL url = new URL("http://www.baidu.com/");
       // 获得HttpURLConnection对象
       connection = (HttpURLConnection) url.openConnection();
       // 默认为GET请求
       connection.setRequestMethod("GET");
       // 设置 链接 超时时间
       connection.setConnectTimeout(8000);
       // 设置 读取 超时时间
       connection.setReadTimeout(8000);
       // 设置是否从HttpURLConnection读入,默认为true
       connection.setDoInput(true);
       connection.setDoOutput(true);
 
       // 请求相应码是否为200(OK)
       if(connection.getResponseCode() == HttpURLConnection.HTTP_OK){
        // 下面对获取到的输入流进行读取
        InputStream in          = connection.getInputStream();
        BufferedReader reader   = new BufferedReader(new InputStreamReader(in));
        StringBuilder  response = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
         response.append(line);
        }
        Message message = new Message();
        message.what  = SHOW_RESPONSE1;
        message.obj  = response.toString();
        handler.sendMessage(message);
       }else{
        Message message = new Message();
        message.what  = SHOW_RESPONSE3;
        handler.sendMessage(message);
       }
 
      } catch (Exception e) {
             e.printStackTrace();
      } finally {
             // 关闭连接
             if (connection != null) {
              connection.disconnect();
       }
      }
     }
    }).start();
   }

HttpClient GET请求核心代码

 private void sendRequestWithHttpClient() {
   new Thread(new Runnable() {
    @Override
    public void run() {
          try {
           HttpClient httpClient = new DefaultHttpClient();
           // 指定访问的服务器地址是电脑本机
           // 注意:由于是本机测试,所以测试设备和接口必须在同一网段内,否则访问失败
           HttpGet httpGet = new HttpGet("http://192.168.0.162:8082/get_data.json");
           HttpResponse httpResponse = httpClient.execute(httpGet);
           if (httpResponse.getStatusLine().getStatusCode() == 200) {
            // 请求和响应都成功了
            HttpEntity entity = httpResponse.getEntity();
            String response = EntityUtils.toString(entity, "utf-8");
            // 解析JSON
            parseJSONWithGSON(response);
  
             Message message = new Message();
             message.what    = SHOW_RESPONSE2;
             message.obj     = response.toString();
             handler.sendMessage(message);
      }
     } catch (Exception e) {
           e.printStackTrace();
     }
    }
   }).start();
  }

参考资料

《第一行代码》 http://www.tuicool.com/articles/Yjq6niQ

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表