前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android通过原生请求直接获取网页内容

Android通过原生请求直接获取网页内容

原创
作者头像
谭广健
修改2020-09-01 17:52:41
2.5K0
修改2020-09-01 17:52:41
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

书接上一回,写了一个Android通过URL文件下载及文件名提取;以其简单受到其他小伙伴的赞许。今天刚好需要写一个安卓版的

网页内容获取功能。本来想上okhttp,但还是原生之美吧,简单就是最好的应用。

代码语言:javascript
复制
String requestUrl = "http://119.29.29.29/d?dn=www.baidu.com";// 新建一个URL对象
URL url = new URL(requestUrl);// 打开一个HttpURLConnection连接
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();// 设置连接主机超时时间
                  urlConn.setConnectTimeout(5 * 1000);//设置从主机读取数据超时
                  urlConn.setReadTimeout(5 * 1000);// 设置是否使用缓存  默认是true
                  urlConn.setUseCaches(true);// 设置为Post请求
                  urlConn.setRequestMethod("GET");//urlConn设置请求头信息
                  urlConn.setRequestProperty("Content-Type", "application/json");
                  //设置客户端与服务连接类型
                  urlConn.addRequestProperty("Connection", "Keep-Alive");
                  urlConn.connect();            // 开始连接
            // 判断请求是否成功
            if (urlConn.getResponseCode() == 200) {
                String result = streamToString(urlConn.getInputStream());//获取的内容
                WriteLog.writeTxtToFile(AppTimeUtils.formatDate(new Date()) + ":" + "GetIP url=result=>"+result);
                String[] ipArr = result.split(";");
                if (2 == ipArr.length && !"0".equals(ipArr[0])) { 
                // 通过HTTPDNS获取IP成功,进行URL替换和HOST头设置
                    String ip = ipArr[0];
                    oldip="tcp://"+ip+":1883";
                }
            }
                  urlConn.disconnect();

简单介绍一下这个代码的功能,就是通过IP地址去解释网址,然后获得网址的真实IP。注意streamToString是通过输入流转为字符串,也是这里的重点,如果没有这个看到的都是乱码。放码。。。

代码语言:javascript
复制
private static String streamToString(InputStream is) {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = is.read(buffer)) != -1) {
            baos.write(buffer, 0, len);
        }
        baos.close();
        is.close();
        byte[] byteArray = baos.toByteArray();
        return new String(byteArray);
    } catch (Exception e) {
        Log.e(TAG, e.toString());
        return null;
    }
}

这样就完成一次安卓下简单的数据采集功能了。。。当然如果更大的应用就用okhttp吧。。比较真的不错,不能再错!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Anycast 公网加速
Anycast 公网加速(Anycast Internet Acceleration,AIA)是一个覆盖多地的动态加速网络,可以大幅提升您业务的公网访问体验。不同于其他应用层加速服务,AIA 能实现 IP 传输的质量优化和多入口就近接入,减少网络传输的抖动、丢包,最终提升云上应用的服务质量,扩大服务范围,精简后端部署。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档