HTTP请求代理类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.log4j.Logger;

/**
 * <pre>
 * HTTP请求代理类
 * </pre>
 *
 * @author benl
 * @version 1.0, 2007-7-3
 */
public class HttpRequestProxy
{
    /**
     * 连接超时
     */
    private static int connectTimeOut = 5000;

    /**
     * 读取数据超时
     */
    private static int readTimeOut = 10000;

    /**
     * 请求编码
     */
    private static String requestEncoding = "UTF-8";

    private static Logger logger = Logger.getLogger(HttpRequestProxy.class);

    /**
     * <pre>
     * 发送带参数的GET的HTTP请求
     * </pre>
     *
     * @param reqUrl HTTP请求URL
     * @param parameters 参数映射表
     * @return HTTP响应的字符串
     */
    public static String doGet(String reqUrl, Map parameters,
            String recvEncoding)
    {
        HttpURLConnection url_con = null;
        String responseContent = null;
        try
        {
            StringBuffer params = new StringBuffer();
            for (Iterator iter = parameters.entrySet().iterator(); iter
                    .hasNext();)
            {
                Entry element = (Entry) iter.next();
                params.append(element.getKey().toString());
                params.append("=");
                params.append(URLEncoder.encode(element.getValue().toString(),
                        HttpRequestProxy.requestEncoding));
                params.append("&");
            }

            if (params.length() > 0)
            {
                params = params.deleteCharAt(params.length() - 1);
            }

            URL url = new URL(reqUrl);
            url_con = (HttpURLConnection) url.openConnection();
            url_con.setRequestMethod("GET");
            System.setProperty("sun.net.client.defaultConnectTimeout", String
                    .valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
            System.setProperty("sun.net.client.defaultReadTimeout", String
                    .valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
            // url_con.setConnectTimeout(5000);//(单位:毫秒)jdk
            // 1.5换成这个,连接超时
            // url_con.setReadTimeout(5000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
            url_con.setDoOutput(true);
            byte[] b = params.toString().getBytes();
            url_con.getOutputStream().write(b, 0, b.length);
            url_con.getOutputStream().flush();
            url_con.getOutputStream().close();

            InputStream in = url_con.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(in,
                    recvEncoding));
            String tempLine = rd.readLine();
            StringBuffer temp = new StringBuffer();
            String crlf=System.getProperty("line.separator");
            while (tempLine != null)
            {
                temp.append(tempLine);
                temp.append(crlf);
                tempLine = rd.readLine();
            }
            responseContent = temp.toString();
            rd.close();
            in.close();
        }
        catch (IOException e)
        {
            logger.error("网络故障", e);
        }
        finally
        {
            if (url_con != null)
            {
                url_con.disconnect();
            }
        }

        return responseContent;
    }

    /**
     * <pre>
     * 发送不带参数的GET的HTTP请求
     * </pre>
     *
     * @param reqUrl HTTP请求URL
     * @return HTTP响应的字符串
     */
    public static String doGet(String reqUrl, String recvEncoding)
    {
        HttpURLConnection url_con = null;
        String responseContent = null;
        try
        {
            StringBuffer params = new StringBuffer();
            String queryUrl = reqUrl;
            int paramIndex = reqUrl.indexOf("?");

            if (paramIndex > 0)
            {
                queryUrl = reqUrl.substring(0, paramIndex);
                String parameters = reqUrl.substring(paramIndex + 1, reqUrl
                        .length());
                String[] paramArray = parameters.split("&");
                for (int i = 0; i < paramArray.length; i++)
                {
                    String string = paramArray[i];
                    int index = string.indexOf("=");
                    if (index > 0)
                    {
                        String parameter = string.substring(0, index);
                        String value = string.substring(index + 1, string
                                .length());
                        params.append(parameter);
                        params.append("=");
                        params.append(URLEncoder.encode(value,
                                HttpRequestProxy.requestEncoding));
                        params.append("&");
                    }
                }

                params = params.deleteCharAt(params.length() - 1);
            }

            URL url = new URL(queryUrl);
            url_con = (HttpURLConnection) url.openConnection();
            url_con.setRequestMethod("GET");
            System.setProperty("sun.net.client.defaultConnectTimeout", String
                    .valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
            System.setProperty("sun.net.client.defaultReadTimeout", String
                    .valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
            // url_con.setConnectTimeout(5000);//(单位:毫秒)jdk
            // 1.5换成这个,连接超时
            // url_con.setReadTimeout(5000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
            url_con.setDoOutput(true);
            byte[] b = params.toString().getBytes();
            url_con.getOutputStream().write(b, 0, b.length);
            url_con.getOutputStream().flush();
            url_con.getOutputStream().close();
            InputStream in = url_con.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(in,
                    recvEncoding));
            String tempLine = rd.readLine();
            StringBuffer temp = new StringBuffer();
            String crlf=System.getProperty("line.separator");
            while (tempLine != null)
            {
                temp.append(tempLine);
                temp.append(crlf);
                tempLine = rd.readLine();
            }
            responseContent = temp.toString();
            rd.close();
            in.close();
        }
        catch (IOException e)
        {
            logger.error("网络故障", e);
        }
        finally
        {
            if (url_con != null)
            {
                url_con.disconnect();
            }
        }

        return responseContent;
    }

    /**
     * <pre>
     * 发送带参数的POST的HTTP请求
     * </pre>
     *
     * @param reqUrl HTTP请求URL
     * @param parameters 参数映射表
     * @return HTTP响应的字符串
     */
    public static String doPost(String reqUrl, Map parameters,
            String recvEncoding)
    {
        HttpURLConnection url_con = null;
        String responseContent = null;
        try
        {
            StringBuffer params = new StringBuffer();
            for (Iterator iter = parameters.entrySet().iterator(); iter
                    .hasNext();)
            {
                Entry element = (Entry) iter.next();
                params.append(element.getKey().toString());
                params.append("=");
                params.append(URLEncoder.encode(element.getValue().toString(),
                        HttpRequestProxy.requestEncoding));
                params.append("&");
            }

            if (params.length() > 0)
            {
                params = params.deleteCharAt(params.length() - 1);
            }

            URL url = new URL(reqUrl);
            url_con = (HttpURLConnection) url.openConnection();
            url_con.setRequestMethod("POST");
            System.setProperty("sun.net.client.defaultConnectTimeout", String
                    .valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
            System.setProperty("sun.net.client.defaultReadTimeout", String
                    .valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
            // url_con.setConnectTimeout(5000);//(单位:毫秒)jdk
            // 1.5换成这个,连接超时
            // url_con.setReadTimeout(5000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
            url_con.setDoOutput(true);
            byte[] b = params.toString().getBytes();
            url_con.getOutputStream().write(b, 0, b.length);
            url_con.getOutputStream().flush();
            url_con.getOutputStream().close();

            InputStream in = url_con.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(in,
                    recvEncoding));
            String tempLine = rd.readLine();
            StringBuffer tempStr = new StringBuffer();
            String crlf=System.getProperty("line.separator");
            while (tempLine != null)
            {
                tempStr.append(tempLine);
                tempStr.append(crlf);
                tempLine = rd.readLine();
            }
            responseContent = tempStr.toString();
            rd.close();
            in.close();
        }
        catch (IOException e)
        {
            logger.error("网络故障", e);
        }
        finally
        {
            if (url_con != null)
            {
                url_con.disconnect();
            }
        }
        return responseContent;
    }

    /**
     * @return 连接超时(毫秒)
     * @see com.hengpeng.common.web.HttpRequestProxy#connectTimeOut
     */
    public static int getConnectTimeOut()
    {
        return HttpRequestProxy.connectTimeOut;
    }

    /**
     * @return 读取数据超时(毫秒)
     * @see com.hengpeng.common.web.HttpRequestProxy#readTimeOut
     */
    public static int getReadTimeOut()
    {
        return HttpRequestProxy.readTimeOut;
    }

    /**
     * @return 请求编码
     * @see com.hengpeng.common.web.HttpRequestProxy#requestEncoding
     */
    public static String getRequestEncoding()
    {
        return requestEncoding;
    }

    /**
     * @param connectTimeOut 连接超时(毫秒)
     * @see com.hengpeng.common.web.HttpRequestProxy#connectTimeOut
     */
    public static void setConnectTimeOut(int connectTimeOut)
    {
        HttpRequestProxy.connectTimeOut = connectTimeOut;
    }

    /**
     * @param readTimeOut 读取数据超时(毫秒)
     * @see com.hengpeng.common.web.HttpRequestProxy#readTimeOut
     */
    public static void setReadTimeOut(int readTimeOut)
    {
        HttpRequestProxy.readTimeOut = readTimeOut;
    }

    /**
     * @param requestEncoding 请求编码
     * @see com.hengpeng.common.web.HttpRequestProxy#requestEncoding
     */
    public static void setRequestEncoding(String requestEncoding)
    {
        HttpRequestProxy.requestEncoding = requestEncoding;
    }
    
    public static void main(String[] args)
    {
        String merchantNo = "104110053004253";
        String orderNo = "101023416806|101023456773";
        String BOCSignData = "MIIE2gYJKoZIhvcNAQcCoIIEyzCCBMcCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCA4sw"+
        "ggOHMIICb6ADAgECAhBlbnAZxlBDBRNkh85GdkJfMA0GCSqGSIb3DQEBBQUAMF0xCzAJBgNVBAYT"+
        "AkNOMRYwFAYDVQQKEw1CQU5LIE9GIENISU5BMRAwDgYDVQQIEwdCRUlKSU5HMRAwDgYDVQQHEwdC"+
        "RUlKSU5HMRIwEAYDVQQDEwlCT0NORVQgQ0EwHhcNMTAwNzE4MDUyMTAyWhcNMTMwNzE3MDUyMTAy"+
        "WjCBpDELMAkGA1UEBhMCQ04xFjAUBgNVBAoTDUJBTksgT0YgQ0hJTkExfTB7BgNVBAMedE4tVv1+"+
        "olNBW1dX+pHRTxoAXwAzAGIANQA0AGUAZgBhADIAYQA0ADMANgBlADYAYgA3ADMAOABhADAANgA1"+
        "ADgAMgAyADAAMgA0ADAAMAAwAGEANABmADcAMwA3AGQANwBkAF9T8k9zTlAAXwAwADAAMwAyMIGf"+
        "MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpx6bL+MHWWph35A1hYMev4GF/UmvgO79PoARpdMVN"+
        "muVavAxBrYWH+A3JqLrALrf+x97XvwUSlIp5VEZAuig1nFHHHTZ9L7dKioSsouKq2gIE3e+PDpSG"+
        "53cvvlfq/mL+X8/lUkzzMcDdAtB5/6FXm17AUj8EvYUtoOMmg+8RwwIDAQABo38wfTAfBgNVHSME"+
        "GDAWgBQuW1k4LWBGaFcaG6P4pnvFD2Zu3jAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vMTkyLjE2"+
        "OC45LjE0OS9jcmwyLmNybDALBgNVHQ8EBAMCBPAwHQYDVR0OBBYEFMrGGoT9UrE8vYy+KlW3GFZj"+
        "opCuMA0GCSqGSIb3DQEBBQUAA4IBAQBgS4jpherRSn/ZHT1NNxiKjc7Qx2XP7fSqQY1Z11c7zLBD"+
        "ernQ1PgvB7Empyrs9oPICh40iDkHuua78/wYNGMnYuiwdyLto3cmKwXmtU87YRRvioEWvLxFPgoW"+
        "6KFD/u5xdalhPGG0WQDOb4/ry2AZkaQafn3yCj4qodQMTxe0SBT/ZLLNGP94BEvvxJaqt7MUJc+F"+
        "2dk0JPBAdro8bGAMwpKhnbjmoIAhXuY4gJxhhxY5+lYqs7gsS5O21+fpI/1AH9A/l8Ldf5ZoXOZ+"+
        "EysW9S0OmYPOiy4aK50WIEzPUp2ik8Zi4ldB2JYzBP15x/ednNQUGQKM772pkRPQBtiSMYIBFzCC"+
        "ARMCAQEwcTBdMQswCQYDVQQGEwJDTjEWMBQGA1UEChMNQkFOSyBPRiBDSElOQTEQMA4GA1UECBMH"+
        "QkVJSklORzEQMA4GA1UEBxMHQkVJSklORzESMBAGA1UEAxMJQk9DTkVUIENBAhBlbnAZxlBDBRNk"+
        "h85GdkJfMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYB76+aCMLHuM4GaLul7LUsIk+kNZO1q"+
        "9aUDkd0kWyUM719sxclqym+0tVyouy09DNgWhmhfozyxy3dEtxwN5f8Uxd28lLz07R6qOZF/VmQR"+
        "F1BIz18pFAZMKa7h0jZcTgMIbjYwOUZpB8bYG1dB6Gdg5Y2kDQMZ661AfTDTGWYVPA==";
        Map map = new HashMap();
        
        map.put("merchantNo",merchantNo);
        map.put("orderNos",orderNo);
        map.put("signData",BOCSignData);
        
        String temp = HttpRequestProxy.doPost("https://125.35.4.200:443/PGWPortal/QueryOrder.do", map, "UTF-8");
        System.out.println("返回的消息是:"+temp);
        
    }
}

猜你喜欢

转载自bondy.iteye.com/blog/1897031