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

2020-09-01 17:52:41 浏览数 (2)

书接上一回,写了一个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吧。。比较真的不错,不能再错!

0 人点赞