`

HTTP请求代理类

    博客分类:
  • J2SE
 
阅读更多

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

分享到:
评论

相关推荐

    C# 代理类生成工具

    3. **代理类的工作原理**:代理类通过.NET的SOAP客户端实现,它使用HTTP或HTTPS协议发送XML消息到Web服务,并接收返回的响应。它处理所有网络通信细节,如编码、解码、错误处理和重试策略。 4. **使用代理类**:...

    封装好的HTTP请求类,基于QT

    3. **请求头管理**:HTTP请求头包含了许多重要的信息,如用户代理、接受类型、授权信息等。封装的类会提供方法来设置和管理这些头信息。 4. **上传和下载进度**:对于大文件的上传或下载,封装的类通常会提供进度回...

    c#下的http请求通用类(自动实现保留上次请求cookie,自动登录)

    c#下的http请求通用类(自动实现保留上传请求cookie,自动登录)。调用getUrlResponse方法可以获取HttpWebResponse请求对象,调用getUrlRespHtml方法可以获取请求获得的html内容。还可以设置代理IP地址。

    http请求处理PHP类.zip

    这个"HTTP请求处理PHP类.zip"包含了一个用CURL库封装的类,方便开发者更高效、简洁地实现GET、POST请求以及多URL并行请求。下面我们将深入探讨这个类可能包含的关键功能和原理。 首先,CURL(Client URL Library)...

    http请求工具类HttpClientUtil,get,post请求(csdn)————程序.pdf

    HttpClientUtil 是一个用于发送 HTTP 请求的工具类,主要支持 GET 和 POST 方法。它使用了 Apache HttpClient 库,这是一个强大的 Java 客户端编程工具包,用于处理 HTTP 协议。以下是对类中关键方法和概念的详细...

    .net webservices 代理类

    当客户端需要调用Web服务时,它实际上是在与代理类交互,代理类负责处理所有与Web服务通信的细节,如构建SOAP消息、处理HTTP请求和响应,以及将返回的数据转换为易于使用的.NET对象。 在.NET中,`svcutil.exe`工具...

    HttpUtils 发送http请求工具类(实例讲解)

    该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...

    因缺少代理类而而无法加载运行的servlet类(接收post请求)

    例如,Tomcat会生成一个实现了Servlet接口的代理类,该代理类会转发HTTP请求到实际的Servlet实现类。这样做的好处包括:拦截请求、添加额外的监控、事务管理等。 银联二维码支付的流程一般涉及以下几个步骤: 1. *...

    C/C++ http请求

    当涉及到网络编程时,发送HTTP请求是常见的需求,例如获取网页数据、与Web API交互等。在C/C++中实现HTTP请求可能需要对网络编程的基本原理有一定了解,包括TCP/IP协议栈、HTTP协议格式以及套接字编程。 标题“C/...

    利用wsdl.exe生成webservice代理类

    利用wsdl.exe生成webservice代理类: 根据提供的wsdl生成webservice代理类 1、开始-&gt;程序-&gt;Visual Studio 2005 命令提示 2、输入如下红色标记部分 D:\Program Files\Microsoft Visual Studio 8\VC&gt;wsdl /...

    Socket+OpenSSL API 打造HTTP请求类,支持HTTPS

    Socket+OpenSSL API 打造HTTP请求类,支持HTTPS。源码部分代码(socket、openssl),来自论坛、Q群共享,向原作者致敬。http请求类为原创,速度比“WinHttpRequest”对象要快一些。类方法命名,基本参照“鱼刺...

    c#使用Socket发送HTTP/HTTPS请求的实现代码

    使用C#的Socket类发送HTTP/HTTPS请求是一种高效的方法,适用于需要自定义HTTP封包或对HTTP请求进行深入控制的应用场景。通过本文的解释,读者可以了解如何使用Socket来发送HTTP/HTTPS请求,并对相关的知识点进行了...

    iOS安全之【拦截请求,实现特定目的 】(修改HTTPHeaderField、不走全局proxy、设置代理IP和端口、对网络请求的数据进行报文级别的加密)

    2.3、对网络请求的数据进行报文级别的加密:使用NSURLProtocol来自动监听HTTP请求并加密解密。 通过[NSURLProtocol registerClass: [NetworkInject class]];注入了自定义的NSURLProtocol类 3、原理:利用...

    c# http请求模拟

    在C#中,模拟HTTP请求通常通过使用`System.Net.Http`命名空间中的`HttpClient`类来实现。以下是一个基本的POST请求示例: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; public ...

    WebService介绍(三):使用WebService代理类

    iOS中的`NSUrlSession`或Android的`Volley`库都可以用来处理HTTP请求,但通常需要手动构造SOAP消息或处理RESTful API的JSON响应。 总之,WebService代理类是客户端与WebService交互的重要工具,它简化了跨平台通信...

    如何伪造IP 发送HTTP请求request

    6. **网络编程和源码**:"封装了HTTP操作的类,支持代理服务 - VC 源码 - 网络编程"提供了实现此类功能的代码资源,可以帮助开发者快速构建自己的HTTP请求工具,通过代理进行通信。 总结来说,伪造IP发送HTTP请求...

    web 请求及http请求报文

    Web请求和HTTP请求报文是网络编程中的核心概念,尤其在开发Web应用程序时至关重要。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器的传输协议。在此,我们将...

    C#实现HTTP代理

    HttpClient是.NET Framework和.NET Core中用于执行HTTP请求的强大工具。要设置HTTP代理,我们需要创建一个HttpClientHandler实例,并通过设置其Proxy属性来指定代理服务器的地址。 ```csharp var handler = new ...

    http请求抓包工具

    在互联网技术领域,理解和分析HTTP请求是至关重要的,因为它是客户端(如浏览器)与服务器之间通信的基础。HTTP抓包工具能够帮助开发者和网络技术人员深入洞察网络流量,捕获并查看这些请求的详细信息。本篇文章将...

Global site tag (gtag.js) - Google Analytics