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();            }        }    }}

更多相关文章

  1. android studio更新到1.5后遇到的问题
  2. Android(安卓)Studio 自动生成注释(作者、日期、联系方式、描述)
  3. android studio 快捷键描述和设置
  4. Android(安卓)开发入门
  5. 我所理解的Android模块化(四)——常见问题和注意事项
  6. Android(安卓)SD卡操作
  7. Android(安卓)AppWidget系统框架
  8. Android(安卓)Tethering can't been open(QCOM平台)
  9. ConstraintLayout 学习

随机推荐

  1. Android(安卓)SDK 1.5中文版 (Applicatio
  2. Android开发指南-框架主题-安全和许可
  3. 2020互联网寒冬下,一个 Android(安卓)程序
  4. Android(安卓)纯代码化编码1_关于布局
  5. Android(安卓)Ice Cream Sandwich 两分钟
  6. Android中各种Adapter的介绍及使用
  7. [Android] [Java] Process 创建+控制+分
  8. Android(安卓)WebView调用本地相册的方法
  9. 一张图告诉你Android手机系统更新多么混
  10. Android(安卓)UI设计秘笈