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);
}
}
- 浏览: 19272 次
- 性别:
- 来自: 南京
文章分类
发表评论
-
线程安全的单例模式
2013-07-17 18:02 797面试的时候,常常会被问到这样一个问题:请您写出一个单例模式( ... -
HttpClient通过GET和POST获取网页内容
2013-07-01 16:33 0/** * 中国银行支付网关---银行回调的接口 * @s ... -
java去除字符串中的空格、回车、换行符、制表符
2013-07-01 16:15 757import java.util.regex.Matche ... -
java读写本地日志文件
2013-07-01 15:51 1603package mytools;import java.i ... -
java对本地日志文件的读写
2013-07-01 15:38 0package mytools;import java.i ... -
Element类提供的方法
2012-03-07 09:49 2311Element类提供的方法 Method Commen ... -
Java操作XML文件 dom4j
2012-03-06 09:35 832在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它 ... -
java.util.Properties类
2012-03-04 20:19 895java.util.Properties类 学习笔记 ...
相关推荐
3. **代理类的工作原理**:代理类通过.NET的SOAP客户端实现,它使用HTTP或HTTPS协议发送XML消息到Web服务,并接收返回的响应。它处理所有网络通信细节,如编码、解码、错误处理和重试策略。 4. **使用代理类**:...
3. **请求头管理**:HTTP请求头包含了许多重要的信息,如用户代理、接受类型、授权信息等。封装的类会提供方法来设置和管理这些头信息。 4. **上传和下载进度**:对于大文件的上传或下载,封装的类通常会提供进度回...
c#下的http请求通用类(自动实现保留上传请求cookie,自动登录)。调用getUrlResponse方法可以获取HttpWebResponse请求对象,调用getUrlRespHtml方法可以获取请求获得的html内容。还可以设置代理IP地址。
这个"HTTP请求处理PHP类.zip"包含了一个用CURL库封装的类,方便开发者更高效、简洁地实现GET、POST请求以及多URL并行请求。下面我们将深入探讨这个类可能包含的关键功能和原理。 首先,CURL(Client URL Library)...
当客户端需要调用Web服务时,它实际上是在与代理类交互,代理类负责处理所有与Web服务通信的细节,如构建SOAP消息、处理HTTP请求和响应,以及将返回的数据转换为易于使用的.NET对象。 在.NET中,`svcutil.exe`工具...
HttpClientUtil 是一个用于发送 HTTP 请求的工具类,主要支持 GET 和 POST 方法。它使用了 Apache HttpClient 库,这是一个强大的 Java 客户端编程工具包,用于处理 HTTP 协议。以下是对类中关键方法和概念的详细...
该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...
例如,Tomcat会生成一个实现了Servlet接口的代理类,该代理类会转发HTTP请求到实际的Servlet实现类。这样做的好处包括:拦截请求、添加额外的监控、事务管理等。 银联二维码支付的流程一般涉及以下几个步骤: 1. *...
当涉及到网络编程时,发送HTTP请求是常见的需求,例如获取网页数据、与Web API交互等。在C/C++中实现HTTP请求可能需要对网络编程的基本原理有一定了解,包括TCP/IP协议栈、HTTP协议格式以及套接字编程。 标题“C/...
利用wsdl.exe生成webservice代理类: 根据提供的wsdl生成webservice代理类 1、开始->程序->Visual Studio 2005 命令提示 2、输入如下红色标记部分 D:\Program Files\Microsoft Visual Studio 8\VC>wsdl /...
Socket+OpenSSL API 打造HTTP请求类,支持HTTPS。源码部分代码(socket、openssl),来自论坛、Q群共享,向原作者致敬。http请求类为原创,速度比“WinHttpRequest”对象要快一些。类方法命名,基本参照“鱼刺...
使用C#的Socket类发送HTTP/HTTPS请求是一种高效的方法,适用于需要自定义HTTP封包或对HTTP请求进行深入控制的应用场景。通过本文的解释,读者可以了解如何使用Socket来发送HTTP/HTTPS请求,并对相关的知识点进行了...
2.3、对网络请求的数据进行报文级别的加密:使用NSURLProtocol来自动监听HTTP请求并加密解密。 通过[NSURLProtocol registerClass: [NetworkInject class]];注入了自定义的NSURLProtocol类 3、原理:利用...
在C#中,模拟HTTP请求通常通过使用`System.Net.Http`命名空间中的`HttpClient`类来实现。以下是一个基本的POST请求示例: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; public ...
iOS中的`NSUrlSession`或Android的`Volley`库都可以用来处理HTTP请求,但通常需要手动构造SOAP消息或处理RESTful API的JSON响应。 总之,WebService代理类是客户端与WebService交互的重要工具,它简化了跨平台通信...
6. **网络编程和源码**:"封装了HTTP操作的类,支持代理服务 - VC 源码 - 网络编程"提供了实现此类功能的代码资源,可以帮助开发者快速构建自己的HTTP请求工具,通过代理进行通信。 总结来说,伪造IP发送HTTP请求...
Web请求和HTTP请求报文是网络编程中的核心概念,尤其在开发Web应用程序时至关重要。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器的传输协议。在此,我们将...
HttpClient是.NET Framework和.NET Core中用于执行HTTP请求的强大工具。要设置HTTP代理,我们需要创建一个HttpClientHandler实例,并通过设置其Proxy属性来指定代理服务器的地址。 ```csharp var handler = new ...
在互联网技术领域,理解和分析HTTP请求是至关重要的,因为它是客户端(如浏览器)与服务器之间通信的基础。HTTP抓包工具能够帮助开发者和网络技术人员深入洞察网络流量,捕获并查看这些请求的详细信息。本篇文章将...