• Android Http请求


    Android HTTP请求封装代码

    /**
     * This class is the Utils of other classes.
     */
    public class HttpUtil {
        /** 变量/常量说明 */
        private static final String TAG              = "HttpUtils";
        /** 超时时间 */
        private static int          mTimeOut         = 20000;
        /** 私钥密码 */
        /** 使用协议 */
        private static final String CLIENT_AGREEMENT = "TLS";
        /** 密钥管理器 */
        /** 变量/常量说明 */
        private static HttpUtil     mHttpUtils       = null;
    
        /**
         * 获取HPPS对象实例
         * 
         * @param application
         * @return
         * @since V1.0
         */
        public static HttpUtil getInstace(Context context) {
            if (mHttpUtils == null) {
                mHttpUtils = new HttpUtil(context);
            }
            return mHttpUtils;
        }
    
        /**
         * @param application
         */
        private HttpUtil(Context context) {
        }
    
        /**
         * 这里对方法做描述
         * 
         * @param servAddr
         * @param xmlBody
         * @return
         * @throws HttpException
         * @since V1.0
         */
        public String httpGetRequest(String servAddr) throws HttpException {
            // create connection
            String response = null;
            HttpURLConnection conn = null;
            boolean ret = false;
            InputStream in = null;
    
            try {
                URL url = new URL(servAddr);
                conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(mTimeOut);
                conn.setReadTimeout(mTimeOut);
                conn.setDoInput(true);
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Content-type", "text/xml; charset=utf-8");
    
                if (conn.getResponseCode() == 200) {
                    // getCookie(conn);
                    in = new BufferedInputStream(conn.getInputStream());
                } else {
                    in = new BufferedInputStream(conn.getErrorStream());
                }
    
                response = inputStream2String(in);
    
                in.close();
                in = null;
                ret = true;
            } catch (MalformedURLException e) {
                ret = false;
                e.printStackTrace();
            } catch (ProtocolException e) {
                ret = false;
                e.printStackTrace();
            } catch (IOException e) {
                ret = false;
                e.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    in = null;
                }
                if (conn != null) {
                    // 断开连接
                    conn.disconnect();
                    conn = null;
                }
            }
    
            // 抛出异常
            if (!ret) {
                throw new HttpException("network exception", HttpException.HTTP_NETWORD_EXCEPTION);
            }
    
            return response;
        }
    
        /**
         * 这里对方法做描述
         * 
         * @return
         * @throws InvalidFormatException
         * @see
         * @since V1.0
         */
        public static String httpPostRequest(String path) {
            // create connection
            String response = null;
            HttpURLConnection conn = null;
            try {
                URL url = new URL(path);
                conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(mTimeOut);
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-type", "text/xml; charset=utf-8");
    
                InputStream in = new BufferedInputStream(conn.getInputStream());
                response = inputStream2String(in);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    // 断开连接
                    conn.disconnect();
                    conn = null;
                }
            }
    
            return response;
        }
    
        /**
         * httpPost方式
         * 
         * @param servAddr
         * @param xmlBody
         * @return
         * @throws HttpException
         * @since V1.0
         */
        public String httpPostRequest(String servAddr, String xmlBody) throws HttpException {
            // create connection
            String response = null;
            HttpURLConnection conn = null;
            boolean ret = false;
            InputStream in = null;
            DataOutputStream os = null;
            try {
                URL url = new URL(servAddr);
                conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(mTimeOut);
                conn.setReadTimeout(mTimeOut);
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-type", "text/xml; charset=utf-8");
    
                // send xml contant to server
                os = new DataOutputStream(conn.getOutputStream());
                os.write(xmlBody.getBytes(), 0, xmlBody.getBytes().length);
                os.flush();
                os.close();
                os = null;
                if (conn.getResponseCode() == 200) {
                    // getCookie(conn);
                    in = new BufferedInputStream(conn.getInputStream());
                } else {
                    in = new BufferedInputStream(conn.getErrorStream());
                }
    
                response = inputStream2String(in);
    
                in.close();
                in = null;
                ret = true;
            } catch (MalformedURLException e) {
                ret = false;
                e.printStackTrace();
            } catch (ProtocolException e) {
                ret = false;
                e.printStackTrace();
            } catch (IOException e) {
                ret = false;
                e.printStackTrace();
            } finally {
    
                try {
                    if (in != null) {
                        in.close();
                    }
                    if (os != null) {
                        os.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                in = null;
    
                if (conn != null) {
                    // 断开连接
                    conn.disconnect();
                    conn = null;
                }
            }
    
            // 抛出异常
            if (!ret) {
                throw new HttpException("network exception", HttpException.HTTP_NETWORD_EXCEPTION);
            }
    
            return response;
        }
    
        /**
         * 这里对方法做描述
         * 
         * @return
         * @throws HttpException
         * @see
         * @since V1.0
         */
        public String httpsGetRequest(String servHttpsAddr) {
            if (servHttpsAddr == null || servHttpsAddr.equals("")) {
                CLog.d(TAG, "sslGetRequest servHttpsAddr == null");
                return "";
            }
    
            boolean bRet = verifyHttpsUrl(servHttpsAddr);
            if (!bRet) {
                CLog.d(TAG, "sslGetRequest verifyHttpsUrl fail");
                return "";
            }
    
            String response = "";
            try {
                response = getSslRequest(servHttpsAddr);
            } catch (HttpException e) {
                e.printStackTrace();
                CLog.d(TAG, "sslGetRequest verifyHttpsUrl fail");
                return "";
            }
    
            return response;
        }
    
        /**
         * httpsPost方式发送
         * 
         * @return
         * @throws HttpException
         * @see
         * @since V1.0
         */
        public String httpsPostRequest(String servHttpsAddr, String xmlBody) {
            if (servHttpsAddr == null || servHttpsAddr.equals("")) {
                CLog.d(TAG, "postHttpsRequest servHttpsAddr == null");
                return "";
            }
    
            if (xmlBody == null || xmlBody.equals("")) {
                CLog.d(TAG, "postHttpsRequest xmlBody == null");
                return "";
            }
    
            boolean bRet = verifyHttpsUrl(servHttpsAddr);
            if (!bRet) {
                CLog.d(TAG, "postHttpsRequest verifyHttpsUrl fail");
                return "";
            }
    
            String response = "";
            try {
                response = postSslRequest(servHttpsAddr, xmlBody);
            } catch (HttpException e) {
                e.printStackTrace();
                CLog.d(TAG, "postHttpsRequest postSslRequest fail");
                return "";
            }
    
            return response;
        }
    
        /**
         * 把输入流转化成string
         * 
         * @param is
         * @return
         * @see
         * @since V1.0
         */
        private static String inputStream2String(InputStream is) {
            InputStreamReader inputStreamReader = new InputStreamReader(is);
            BufferedReader in = new BufferedReader(inputStreamReader);
            StringBuffer buffer = new StringBuffer();
            String line = "";
            try {
                while ((line = in.readLine()) != null) {
                    buffer.append(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
    
                try {
                    if (inputStreamReader != null) {
                        inputStreamReader.close();
                    }
                    inputStreamReader = null;
                    if (in != null) {
                        in.close();
                    }
                    in = null;
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            return buffer.toString();
        }
    
        /**
         * 这里对方法做描述
         * 
         * @param servHttpsAddr
         * @param xmlBody
         * @return
         * @throws HttpException
         * @since V1.0
         */
        private String getSslRequest(String servHttpsAddr) throws HttpException {
            // create connection
            String response = null;
            HttpURLConnection conn = null;
            boolean ret = false;
            InputStream in = null;
            try {
                URL url = new URL(servHttpsAddr);
                trustAllHosts();
                conn = (HttpsURLConnection) url.openConnection();
                ((HttpsURLConnection) conn).setHostnameVerifier(DO_NOT_VERIFY);// 不进行主机名确认
    
                // ((HttpsURLConnection)
                // conn).setSSLSocketFactory(getPushSSLSocketFactory());
    
                conn.setConnectTimeout(mTimeOut);
                conn.setReadTimeout(mTimeOut);
                conn.setDoInput(true);
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Content-type", "text/xml; charset=utf-8");
    
                if (conn.getResponseCode() == 200) {
                    // getCookie(conn);
                    in = new BufferedInputStream(conn.getInputStream());
                } else {
                    in = new BufferedInputStream(conn.getErrorStream());
                }
    
                response = inputStream2String(in);
    
                in.close();
                in = null;
                ret = true;
            } catch (MalformedURLException e) {
                ret = false;
                e.printStackTrace();
            } catch (ProtocolException e) {
                ret = false;
                e.printStackTrace();
            } catch (IOException e) {
                ret = false;
                e.printStackTrace();
            }
            // catch (NoSuchAlgorithmException e) {
            // ret = false;
            // e.printStackTrace();
            // } catch (KeyManagementException e) {
            // ret = false;
            // e.printStackTrace();
            // } catch (KeyStoreException e) {
            // ret = false;
            // e.printStackTrace();
            // } catch (CertificateException e) {
            // ret = false;
            // e.printStackTrace();
            // } catch (UnrecoverableKeyException e) {
            // ret = false;
            // e.printStackTrace();
            // }
            finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    in = null;
                }
                if (conn != null) {
                    // 断开连接
                    conn.disconnect();
                    conn = null;
                }
            }
    
            // 抛出异常
            if (!ret) {
                throw new HttpException("network exception", HttpException.HTTP_NETWORD_EXCEPTION);
            }
    
            return response;
        }
    
        /**
         * 验证https地址
         * 
         * @since V1.0
         */
        public boolean verifyHttpsUrl(String httpsAddr) {
            // TODO Auto-generated method stub
            if (httpsAddr == null || httpsAddr.equals("")) {
                CLog.e(TAG, "verifyHttpsUrl httpsAddr == null");
                return false;
            }
    
            URL httpsUurl;
            try {
                httpsUurl = new URL(httpsAddr);
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                CLog.e(TAG, "verifyHttpsUrl httpsAddr not url, error url:" + httpsAddr);
                return false;
            }
    
            if (!httpsUurl.getProtocol().equalsIgnoreCase("https")) {
                CLog.e(TAG, "verifyHttpsUrl httpsAddr not https, error url:" + httpsAddr);
                return false;
            }
    
            return true;
        }
    
        /**
         * post ssl请求
         * 
         * @param servHttpsAddr
         * @param xmlBody
         * @return
         * @throws HttpException
         * @since V1.0
         */
        private String postSslRequest(String servHttpsAddr, String xmlBody) throws HttpException {
            // 回复信令
            String response = null;
            //
            boolean ret = false;
            // 输入流
            InputStream in = null;
            DataOutputStream os = null;
            HttpsURLConnection httpsConn = null;
            InputStream inputStream = null;
            try {
                URL url = new URL(servHttpsAddr);
    
                // solution: javax.net.ssl.SSLException: Not trusted server
                // certificate
                trustAllHosts();
    
                // 打开连接
                httpsConn = (HttpsURLConnection) url.openConnection();
                // 不进行主机名确认
                httpsConn.setHostnameVerifier(DO_NOT_VERIFY);
                httpsConn.setConnectTimeout(mTimeOut);
                httpsConn.setReadTimeout(mTimeOut);
                httpsConn.setDoInput(true);
                httpsConn.setDoOutput(true);
                httpsConn.setRequestMethod("POST");
                httpsConn.setRequestProperty("Content-type","text/xml; charset=utf-8");
    
                // send xml contant to server
                os = new DataOutputStream(httpsConn.getOutputStream());
                os.write(xmlBody.getBytes(), 0, xmlBody.getBytes().length);
                os.flush();
                os.close();
                os = null;
    
                if (httpsConn.getResponseCode() == 200) {
                    // getCookie(conn);
                    inputStream = httpsConn.getInputStream();
                    in = new BufferedInputStream(inputStream);
                } else {
                    inputStream = httpsConn.getErrorStream();
                    in = new BufferedInputStream(inputStream);
                }
    
                response = inputStream2String(in);
                if (inputStream != null) {
                    inputStream.close();
                    inputStream = null;
                }
    
                in.close();
                in = null;
                ret = true;
            } catch (MalformedURLException e) {
                ret = false;
                e.printStackTrace();
            } catch (ProtocolException e) {
                ret = false;
                e.printStackTrace();
            } catch (IOException e) {
                ret = false;
                e.printStackTrace();
            } finally {
    
                try {
                    if (inputStream != null) {
                        inputStream.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                    in = null;
                    if (os != null) {
                        os.close();
                    }
    
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
                if (httpsConn != null) {
                    // 断开连接
                    httpsConn.disconnect();
                    httpsConn = null;
                }
            }
    
            // 抛出异常
            if (!ret) {
                throw new HttpException("network exception", HttpException.HTTP_NETWORD_EXCEPTION);
            }
    
            return response;
        }
    
        /** always verify the host - dont check for certificate */
        final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
                                                        public boolean verify(String hostname, SSLSession session) {
                                                            return true;
                                                        }
                                                    };
    
        /**
         * Trust every server - dont check for any certificate
         * 
         * @since V1.0
         */
        private static void trustAllHosts() {
            // Create a trust manager that does not validate certificate chains
            TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[] {};
                }
    
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }
    
                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }
            } };
    
            // Install the all-trusting trust manager
            try {
                SSLContext sc = SSLContext.getInstance(CLIENT_AGREEMENT);
                sc.init(null, trustAllCerts, new java.security.SecureRandom());
                HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 在此对类做相应的描述 */
        public static class _FakeX509TrustManager implements X509TrustManager {
    
            /** 变量/常量说明 */
            private static TrustManager[]          trustManagers;
            /** 变量/常量说明 */
            private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};
    
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
    
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
    
            /**
             * 这里对方法做描述
             * 
             * @param chain
             * @return
             * @since V1.0
             */
            public boolean isClientTrusted(X509Certificate[] chain) {
                return true;
            }
    
            /**
             * 这里对方法做描述
             * 
             * @param chain
             * @return
             * @since V1.0
             */
            public boolean isServerTrusted(X509Certificate[] chain) {
                return true;
            }
    
            /*
             * (non-Javadoc)
             * @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
             */
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return _AcceptedIssuers;
            }
    
            /**
             * 这里对方法做描述
             * 
             * @since V1.0
             */
            public static void allowAllSSL() {
                HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
                    @Override
                    public boolean verify(String hostname, SSLSession session) {
                        return true;
                    }
    
                });
    
                SSLContext context = null;
                if (trustManagers == null) {
                    trustManagers = new TrustManager[] { new _FakeX509TrustManager() };
                }
    
                try {
                    context = SSLContext.getInstance(CLIENT_AGREEMENT);
                    if (context == null) {
                        return;
                    }
                    context.init(null, trustManagers, new SecureRandom());
                    SSLSocketFactory defaultSSLSocketFactory = context.getSocketFactory();
                    if (defaultSSLSocketFactory != null) {
                        HttpsURLConnection.setDefaultSSLSocketFactory(defaultSSLSocketFactory);
                    }
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                } catch (KeyManagementException e) {
                    e.printStackTrace();
                }
    
            }
        }
    }
  • 相关阅读:
    tomcat 虚拟目录
    linux 基本常用命令
    linux shell
    分布式锁
    多线程 ThreadLocal
    Java并发包中Lock的实现原理
    spring 异常处理
    spring Cache /Redis 缓存 + Spring 的集成示例
    spring 事务传播行为
    Vue.nextTick浅析
  • 原文地址:https://www.cnblogs.com/cr330326/p/4422542.html
Copyright © 2020-2023  润新知