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

            }



        }

    }

}

 

你可能感兴趣的:(android)