import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
public class HttpPostUtil {
/** 应对内容 */
private String resContent;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String url = "https://10.200.48.135:80/paycenter/queryOrder.do?order_no=1364953038575&partner=130&sign=4ecb9b1225b2599e270c937071bd482a";
HttpPostUtil postutil = new HttpPostUtil();
if(postutil.postRequest(url)){
System.out.print(postutil.getResContent());
}
}
/**
* 发送post要求
* @param strUrl
* @return
*/
public boolean postRequest(String strUrl){
//要求url
String url = this.getURL(strUrl);
//要求参数
String queryString = this.getQueryString(strUrl);
try{
if (url.indexOf("https://") != -1) {
this.resContent = this.postHttp(url, queryString);
return true;
} else if (url.indexOf("https://") != -1) {
this.resContent = this.postHttps(url, queryString);
return true;
}
}catch (Exception e) {
e.printStackTrace();
}
return false;
}
public String postHttp(String urlStr, String params) {
System.out.println("http方法提交的URL: "+urlStr + "?" + params);
PrintWriter out = null;
BufferedReader in = null;
StringBuffer result = new StringBuffer();
try {
URL realUrl = new URL(urlStr);
// 打开和URL之间的衔接
URLConnection conn = realUrl.openConnection();
// 设置通用的要求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
// 发送POST要求必需设置以下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获得URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送要求参数
out.print(params);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
while ((line = in.readLine()) != null) {
result.append(line);
}
// System.out.println("remote host respone : "+result);
System.out.println("远程主机返回文本成果:"+result);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
out = null;
}
if (in != null) {
in.close();
in = null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return result.toString();
}
/**
* 以SSL方法提交要求
* @param urlString 提交的url地址
* @param data 提交的要求参数
* @return
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
* @throws IOException
*/
public String postHttps(String urlString, String data) throws NoSuchAlgorithmException, KeyManagementException, IOException
{
System.out.println("https方法提交的URL:"+urlString);
System.out.println("提交的参数:"+data);
OutputStreamWriter os = null;
URL url = new URL(urlString);
URLConnection con = url.openConnection();
System.out.println("衔接类型:"+ con.getClass());
BufferedReader in = null;
StringBuffer result = new StringBuffer();
if (con instanceof javax.net.ssl.HttpsURLConnection) {
System.out.println("*** openConnection returns an instanceof javax.net.ssl.HttpsURLConnection");
//信赖所有证书 开端
javax.net.ssl.SSLContext sc = null;
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[] { new javax.net.ssl.X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
} };
// Install the all-trusting trust manager
sc = javax.net.ssl.SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
//信赖所有证书 停止
javax.net.ssl.HostnameVerifier hv = new javax.net.ssl.HostnameVerifier() {
public boolean verify(String urlHostName, javax.net.ssl.SSLSession session) {
return urlHostName.equals(session.getPeerHost());
}
};
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(hv);
javax.net.ssl.HttpsURLConnection conn = null;
conn = (javax.net.ssl.HttpsURLConnection) con;
// conn.setRequestProperty("Content-Type", "text/xml");
conn.setDoOutput(true);
conn.setFollowRedirects(true);
// conn.setReadTimeout(30000);
os = new OutputStreamWriter(conn.getOutputStream());
os.write(data);
os.flush();
if (conn.getResponseCode() == 302 || conn.getResponseCode() == 200) {
System.out.println("https要求发送胜利。");
System.out.println("返回码:" + conn.getResponseCode());
}
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
while ((line = in.readLine()) != null) {
result.append(line);
}
}
else if (con instanceof com.sun.net.ssl.HttpsURLConnection) {
System.out.println("***openConnection returns an instanceof com.sun.net.ssl.HttpsURLConnection");
//信赖所有证书 开端
com.sun.net.ssl.SSLContext sc = null;
com.sun.net.ssl.TrustManager[] trustAllCerts = new com.sun.net.ssl.TrustManager[] { new com.sun.net.ssl.X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public boolean isClientTrusted(X509Certificate[] arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isServerTrusted(X509Certificate[] arg0) {
// TODO Auto-generated method stub
return true;
}
} };
// Install the all-trusting trust manager
sc = com.sun.net.ssl.SSLContext.getInstance("TLSv1");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
com.sun.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
//信赖所有证书 停止
com.sun.net.ssl.HttpsURLConnection conn = null;
conn = (com.sun.net.ssl.HttpsURLConnection) con;
com.sun.net.ssl.HostnameVerifier hv = new com.sun.net.ssl.HostnameVerifier() {
@Override
public boolean verify(String arg0, String arg1) {
return true;
}
};
com.sun.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(hv);
conn.setAllowUserInteraction(true);
conn.setDoOutput(true);
os = new OutputStreamWriter(conn.getOutputStream());
os.write(data);
os.flush();
if (conn.getResponseCode() == 302 || conn.getResponseCode() == 200) {
System.out.println("https要求发送胜利。");
System.out.println("返回码:" + conn.getResponseCode());
}
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
while ((line = in.readLine()) != null) {
result.append(line);
}
}
System.out.println("远程主机返回的文本成果:"+result);
return result.toString();
}
/**
* 获得不带查询串的url
* @param strUrl
* @return String
*/
private String getURL(String strUrl) {
if(null != strUrl) {
int indexOf = strUrl.indexOf("?");
if(-1 != indexOf) {
return strUrl.substring(0, indexOf);
}
return strUrl;
}
return strUrl;
}
/**
* 获得查询串
* @param strUrl
* @return String
*/
private String getQueryString(String strUrl) {
if(null != strUrl) {
int indexOf = strUrl.indexOf("?");
if(-1 != indexOf) {
return strUrl.substring(indexOf+1, strUrl.length());
}
return "";
}
return strUrl;
}
public String getResContent() {
return resContent;
}
public static InputStream String2Inputstream(String str) {
return new ByteArrayInputStream(str.getBytes());
}
}
import java.io.BufferedReader;
import java.io.Byt