package action; import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException; import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager; import com.bill99.mgw.entity.*;
import com.bill99.mgw.util.*; public class Post
{
/**
* 向指定URL发送POST方法的请求
* @param url 发送请求的URL
* @param param 请求参数,请求参数应该是name1=value1&name2=value2的形式。
* @return URL所代表远程资源的响应
* @throws Exception
*/
public static HashMap sendPost(String url,String tr1XML) throws Exception
{
OutputStream out = null;
HashMap respXml = null; //获取证书路径
File certFile = new File("C://TS/10411004511201290.jks");
//File certFile = new File("D://hui.ding/workspace/DH_QuickPay/src/10411004511201290.jks");
//访问Java密钥库,JKS是keytool创建的Java密钥库,保存密钥。
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(certFile), "vpos123".toCharArray());
//创建用于管理JKS密钥库的密钥管理器
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
//初始化证书
kmf.init(ks, "vpos123".toCharArray()); //同位体验证信任决策源//同位体验证可信任的证书来源
TrustManager[] tm = { new MyX509TrustManager() }; //初始化安全套接字
SSLContext sslContext = SSLContext.getInstance("SSL");
//初始化SSL环境。第二个参数是告诉JSSE使用的可信任证书的来源,设置为null是从javax.net.ssl.trustStore中获得证书。
//第三个参数是JSSE生成的随机数,这个参数将影响系统的安全性,设置为null是个好选择,可以保证JSSE的安全性。
sslContext.init(kmf.getKeyManagers(),tm, null); //根据上面配置的SSL上下文来产生SSLSocketFactory,与通常的产生方法不同
SSLSocketFactory factory = sslContext.getSocketFactory(); try
{
URL realUrl = new URL(url);
//打开和URL之间的连接
HttpsURLConnection conn = (HttpsURLConnection)realUrl.openConnection();
//创建安全的连接套接字
conn.setSSLSocketFactory(factory);
//发送POST请求必须设置如下两行,使用 URL 连接进行输出、入
conn.setDoOutput(true);
conn.setDoInput(true);
//设置URL连接的超时时限
conn.setReadTimeout(100000); //设置通用的请求属性
String authString = "104110045112012" + ":" + "vpos123";
String auth = "Basic " + Base64Binrary.encodeBase64Binrary(authString.getBytes());
conn.setRequestProperty("Authorization", auth); // 获取URLConnection对象对应的输出流
out = conn.getOutputStream();
//发送请求参数
out.write(tr1XML.getBytes("utf-8"));
//flush 输出流的缓冲
out.flush(); //得到服务端返回
InputStream is = conn.getInputStream();
String reqData = "";
if(is!=null && !"".equals(is))
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] receiveBuffer = new byte[2048];//缓冲区长度
int readBytesSize = is.read(receiveBuffer);//读取数据长度,InputStream要读取的数据长度一定要小于等于缓冲区中的字节数
System.out.println("#######readBytesSize:"+readBytesSize); while(readBytesSize != -1){//判断流是否位于文件末尾而没有可用的字节
bos.write(receiveBuffer, 0, readBytesSize);//从receiveBuffer内存处的0偏移开始写,写与readBytesSize长度相等的字节
readBytesSize = is.read(receiveBuffer);
System.out.println("#######bos:"+bos);
}
reqData = new String(bos.toByteArray(), "UTF-8");//编码后的tr2报文
}
System.out.println("tr2报文:"+reqData);
respXml= ParseUtil.parseXML(reqData);//给解析XML的函数传递快钱返回的TR2的XML数据流 }
catch(Exception e)
{
System.out.println("发送POST请求出现异常!" + e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally
{
if (out != null){out.close();}
//if (in != null){in.close();}
}
return respXml;
} }
import了sun开头的类,虽然它在代码里压根就没派上用处!但是必须得引用!的更多相关文章
-
无法引入import com.sun.management.OperatingSystemMXBean
现象:在JDK的安装包的jre\lib\rt.jar包里确实有这个类com.sun.management.OperatingSystemMXBean,但是就是不能import com.sun.man ...
-
import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包
import com.sun.image.codec.jpeg.JPEGCodec; 在Eclipse中处理图片,需要引入两个包: import com.sun.image.codec.jpeg. ...
-
import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包(转载)
http://www.xuebuyuan.com/2008608.html 在Eclipse中处理图片,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCode ...
-
导入import com.sun.image.codec.jpeg.JPEGCodec出错
在Eclipse中处理图片时,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPE ...
-
JDK 1.8 sun.misc.Unsafe类CAS底层实现
在java.util.concurrent包下面的很多类为了追求性能都采用了sun.misc.Unsafe类中的CAS操作,从而避免使用synchronized等加锁方式带来性能上的不足. 在sun. ...
-
[Java]Eclipse无法import “com.sun.management.OperatingSystemMXBean”的解决方法
背景: 当使用jdk的自带的API获取系统信息时,代码中import “com.sun.management.OperatingSystemMXBean”出现报错. 解决方法: Eclipse默认把这 ...
-
Q开头的类找不到,无法加载插件:com.mysema.maven:apt-maven-plugin
http://www.jspxcms.com/documentation/297.html 如果出现无法加载com.mysema.maven:apt-maven-plugin插件的情况,通常是由于ma ...
-
谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 &;&; 类是一种代码重用机制
五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...
-
[置顶] NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析--吐血放送
NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析,限于个人水平,如有错误请留言指出! TcpSink类的recv()方法: void TcpSink::recv(Packet ...
随机推荐
-
HDU 5652(二分+广搜)
题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...
-
Linux中获取当前程序的绝对路径
代码如下: char current_absolut_path[MAX_SIZE] = ""; memset(current_absolut_path,,MAX_SIZE); // ...
-
(转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
问题描述:在用vs生成MVC时若使用Internet应用程序为模版,项目建好后重新编译下无法通过,弹出错误: 解决方案:问题出来后,询问了身边很多人都是一头雾水,于是乎各种谷歌和百度,还好功夫不负有心 ...
-
(转)IDG副总裁楼军:*VC青睐什么样的创业者
学习能力是创业者的第一能力 创业者首先要有格局观和很强的学习能力. 具体什么意思?比如说去年IDG投了一个做C2C平台的海淘项目,创始人之前其实是帮他爱人做海淘代购.他爱人是一个代购买手,赚得还不错, ...
-
perl 调用按钮输出到文本框
sub push_b4 { #$txt -> insert('end'); #select $txt; system("expect c:\\\\expect.txt >expe ...
-
BZOJ4403 序列统计—Lucas你好
绝对是全网写的最详细的一篇题解 题目:序列统计 代码难度:简单 思维难度:提高+-省选 讲下题面:给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案 ...
-
【T-SQL进阶】03.执行计划之旅-1
到大牛们说执行计划,总是很惶恐,是对知识的缺乏的惶恐,所以必须得学习执行计划,以减少对这一块知识的惶恐,下面是对执行计划的第一讲-理解执行计划. 本系列[T-SQL]主要是针对T-SQL的总结. T- ...
-
Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
-
headfirst设计模式(7)—命令模式
一.前言 什么是命令模式? 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这 ...
-
Classnotfoundexception 与 noClassDelfaultError的区别
ClassNotFoundException 这个异常特别常见,就是class找不到异常,一般的问题就是: 1 调用class的forName方法时,找不到指定的类 2 ClassLoader 中的 ...