Android http https访问网络及资源

Http

private String getHttpValue() {
        String str="";
        String url = "http://test";
        URL getUrl;
        HttpURLConnection connection;
        try {
            getUrl = new URL(url);
            connection = (HttpURLConnection) getUrl.openConnection();
            connection.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String lines;
            while ((lines = reader.readLine()) != null) {
                 str+=lines;
            }
            reader.close();
            connection.disconnect();
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("请求返回内容:\n" + str.toString());

        if (str != "") {
            try {
                JSONObject jsonObject = new JSONObject(str);
                str = jsonObject.getString("key");

            } catch (Exception e) {
                Log.e(TAG, e.toString());
            }
        }
        return str;
    }

http获取网络Json参数

private void setHttpImage() {
        ImageView image = null;
        try {
            Log.i(TAG, "http协议准备获取网络头像资源...");
            globalInfoStatus = 0;
            globalVariables.SendMessageInfo = 0;
            byte[] data = getHttpImage(urlPath);
            if (data == null) {
                Log.i(TAG, "获取到网页头像资源失败");

            } else {

                Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
                        data.length);
                image.setImageBitmap(bitmap); 

                Log.i(TAG, "获取到网页头像资源");
            }
        } catch (Exception e) {
            String error = "网络连接失败,请重试!";
            // Toast.makeText(MainActivity.this, error, 1).show();
            Log.e(TAG, e.toString());
        }
    }

/** httpGetImage根据路径获取图片二进制编码 */
    public static byte[] getHttpImage(String path) throws Exception {
        try {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5 * 1000);
            InputStream inStream = conn.getInputStream();
            return readFromInput(inStream);
        } catch (Exception e) {
            Log.i(TAG, e.toString());
            return null;
        }
    }

http获取网络图片资源

https

获取网络参数

public String getURL(String userName) {
        String URLPath = "https://xxx&username="
                + userName;
        String result = "";
        String str = "";
        try {
            URL url = new URL(URLPath);

            SSLContext sslctxt = SSLContext.getInstance("TLS");

            sslctxt.init(null, new TrustManager[] { new MyX509TrustManager() },
                    new java.security.SecureRandom());

            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

            conn.setSSLSocketFactory(sslctxt.getSocketFactory());
            conn.setHostnameVerifier(new MyHostnameVerifier());

            conn.connect();

            int respCode = conn.getResponseCode();
            Log.d(TAG, "ResponseCode=" + respCode);
            if (respCode != 200) {
                return "";
            }
            InputStream input = conn.getInputStream();

            result = getInputString(input);

            Log.d(TAG, "result:" + result);

            input.close();

            conn.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }

        if (result != "") {
            try {
                JSONObject jsonObject = new JSONObject(result);
                str = jsonObject.getString("url");

            } catch (Exception e) {
                Log.e(TAG, e.toString());
            }
        }

        return str;
    }

获取json字符串中的value

static class MyX509TrustManager implements X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            if (null != chain) {
                for (int k = 0; k < chain.length; k++) {
                    X509Certificate cer = chain[k];
                    print(cer);
                }
            }
            Log.d(TAG, "check client trusted. authType=" + authType);

        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            if (null != chain) {
                for (int k = 0; k < chain.length; k++) {
                    X509Certificate cer = chain[k];
                    print(cer);
                }
            }
            Log.d(TAG, "check servlet trusted. authType=" + authType);
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {

            Log.d(TAG, "get acceptedissuer");

            return null;
        }

        private void print(X509Certificate cer) {

            int version = cer.getVersion();
            String sinname = cer.getSigAlgName();
            String type = cer.getType();
            String algorname = cer.getPublicKey().getAlgorithm();
            BigInteger serialnum = cer.getSerialNumber();
            Principal principal = cer.getIssuerDN();
            String principalname = principal.getName();

            Log.d(TAG, "version=" + version + ", sinname=" + sinname
                    + ", type=" + type + ", algorname=" + algorname
                    + ", serialnum=" + serialnum + ", principalname="
                    + principalname);
        }

    }

    static class MyHostnameVerifier implements HostnameVerifier {

        public boolean verify(String hostname, SSLSession session) {
            Log.d(TAG,
                    "hostname=" + hostname + ",PeerHost= "
                            + session.getPeerHost());
            return true;
        }

    }

    private String getInputString(InputStream input) {

        String content = "";
        try {
            InputStreamReader ir = new InputStreamReader(input);
            BufferedReader br = new BufferedReader(ir);

            StringBuilder sbuff = new StringBuilder();
            while (null != br) {
                String temp = br.readLine();
                if (null == temp)
                    break;
                sbuff.append(temp).append(System.getProperty("line.separator"));
            }

            content = sbuff.toString();
            // content=EncodingUtils.getString(baf.toByteArray(), "UTF-8");
            content = URLDecoder.decode(content, "UTF-8");

        } catch (Exception e) {
            e.printStackTrace();
        }

        return content;
    }

各种需要写配合的方法类

Runnable runnableGetUserURL = new Runnable() {
        @Override
        public void run() {// 在新的线程中运行
            if (globalVariables.UserName != "") {
                imageURLString = getURL(UserName);
                Log.d("MainActivity", "imageURL:" + imageURLString);

            }
        }
    };

mThread = new Thread(runnableGetUserURL);
mThread.start();

获取参数的方法需要放入其他线程中

根据URL获取图片资源

public void setUserImage(String urlPath) {
try {
            Log.i(TAG, "https协议准备获取网络头像资源...");

            Bitmap bitmap = httpsGetBitmap(urlPath);
            image = (ImageView)findViewById(R.id.image);
            image.setImageBitmap(bitmap);
        } catch (Exception e) {
            String error = "网络连接失败,请重试!";
            // Toast.makeText(MainActivity.this, error, 1).show();
            Log.e(TAG, e.toString());
        }
    }

private Bitmap httpsGetBitmap(String URLPath) throws Exception {
        URL url = new URL(URLPath);

        SSLContext sslctxt = SSLContext.getInstance("TLS");

        sslctxt.init(null, new TrustManager[] { new MyX509TrustManager() },
                new java.security.SecureRandom());

        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

        conn.setSSLSocketFactory(sslctxt.getSocketFactory());
        conn.setHostnameVerifier(new MyHostnameVerifier());

        conn.connect();
        InputStream inputSream = conn.getInputStream();
        Bitmap bitmap = BitmapFactory.decodeStream(inputSream);
        inputSream.close();

        conn.disconnect();

        return bitmap;
    }

设置图片资源

时间: 2024-09-29 17:40:51

Android http https访问网络及资源的相关文章

iOS 9/10强制使用https访问网络,使用了第三方SDK的应用需要配置的信息

2017年01月01日起苹果将全面禁止使用http来访问网络. 网上扒了一些资源,解决方法还是有的,但是都不确定是否可以通过审核,毕竟实践才是检验真理的唯一标准. 后续如果上线成功,再来分享. 如果应用中使用了shareSDK,请参考(这里). 如果应用中添加了友盟分享,请参考(这里). 当然还有大神进行的比较全面的阐述,请参考(这里). 总结一下,解决方案是:给项目的.plist文件增加配置信息,配置内容如下:给NSAppTransportSecurity字典增加以下内容 1 <dict>

Android子线程访问网络

之所以Google在Android4.0之后,禁止主线程访问网络,是为了更好的用户体验.也就是主线程是为了界面的显示.如果主线程访问网络,就会造成"卡顿".也就是对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程就会出现假死的现象,产生很不好的用户体验.所以,默认的情况下如果直接在主线程中访问就报出了这个异常,名字是NetworkOnMainThreadException.主线程操作5s的相应时间,就会关闭该线程,所以将耗时很大的操作放在子线程

Windows Server 2012 R2 访问网络文件

环境 dc: server01: 默认存储路径 一.公用文件夹 路径:C:\Users\Public 权限:默认情况下everyone用户具有完全控制权 1.现在c盘下建立share文件夹及相关文件夹和文件 2.文件共享 3.在server01上访问共享 4.启用公用文件夹共享 打开网络共享中心,更改高级共享设置,然后如图所示 二.共享文件夹 1.共享文件夹权限 1)读取:查看文件名与子文件夹名称,产看文件内的数据,执行程序 2)更改(修改):新建与删除文件.子文件夹,更改文件内的数据 3)完全

webpy 访问局域网共享资源

遇到一个问题: 在python shell 中调用局域网远程共享文件时,没问题.但是在webpy中调用时,报错:没有权限.那一定是apache设置问题. 网上找不到类似的方法,于是换个思路搜了一下“php访问网络共享资源和本地文件”.(php和webpy调用原理也差不多) 解决方法: 1.确认远程链接可用. 2.在服务器上, cmd --> services.msc -->apache服务 --> “登录” --> 运行账号改为登录windows的超级账号(我设置的是该共享文件对于

Android访问网络(可以正常使用)

以下是MainActiviy.java,有必要的注释,里面用到了handler,以及线程,workThread如何更新mainThread才能够更新的内容. package com.wyl.httptest2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.

Android中访问网络时url中带有特殊字符的问题

Component Example value Also known as Protocol http scheme Authority username:[email protected]:8080   User Info username:password   Host host   Port 8080   File /directory/file?query   Path /directory/file   Query query   Ref ref fragment 一个完整的url链接

Android使用Http协议访问网络

Http协议工作原理大致可以理解为:客户端向服务器发出一条HTTP请求,服务器收到请求后返回一些数据给客户端,客户端对收到数据解析. 在Android6.0以前,Android上发送Http请求主要有两种方式:HttpURLConnection和HttpClient.其中HttpClient存在过多的API且难扩展,于是在Android6.0系统中,HttpClient被完全移除,如需使用,需导入相应文件.这里介绍最近我最近学习的HttpURLConnection的基本使用方法,然后接下来介绍一

Android主线程不能访问网络异常解决办法

从两个方面说下这个问题: 1. 不让访问网络的原因 2. 解决该问题的办法 不让访问网络的原因: 由于对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程 就会出现假死的现象,产生很不好的用户体验.所以,默认的情况下如果直接在主线程中访问就报出了这个异常,名字是NetworkOnMainThreadException 解决该问题的办法 1. 独立线程 2. 异步线程AsyncTask 3. StrictMode修改默认的策略 1) 独立线程的办法 启动一个

Android访问网络

Android中访问网络用的是HttpClient的方式,即Apache提供的一个jar包.安卓中继承了改jar包,所以安卓adt中不需要专门import该jar,直接就可以使用. 以下是MainActivity.java代码: package com.wyl.httptest2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputS