importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importjava.security.KeyManagementException;importjava.security.NoSuchAlgorithmException;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjavax.net.ssl.HostnameVerifier;importjavax.net.ssl.HttpsURLConnection;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSession;importjavax.net.ssl.TrustManager;importjavax.net.ssl.X509TrustManager;importorg.apache.http.HttpEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.config.Registry;importorg.apache.http.config.RegistryBuilder;importorg.apache.http.conn.socket.ConnectionSocketFactory;importorg.apache.http.conn.socket.PlainConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.entity.StringEntity;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager;importorg.apache.http.util.EntityUtils;public classHttpRequest {public staticString exeHttpsRequest(String URL, String message, String token) {
String body= "";
CloseableHttpClient client= null;try{//采用绕过验证的方式处理https请求
SSLContext sslcontext =createIgnoreVerifySSL();//设置协议http和https对应的处理socket链接工厂的对象
Registry socketFactoryRegistry = RegistryBuilder.create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", newSSLConnectionSocketFactory(sslcontext,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER))
.build();
PoolingHttpClientConnectionManager connManager= newPoolingHttpClientConnectionManager(
socketFactoryRegistry);
HttpClients.custom().setConnectionManager(connManager);//创建自定义的httpclient对象
client =HttpClients.custom().setConnectionManager(connManager).build();//CloseableHttpClient client = HttpClients.createDefault();//创建post方式请求对象
HttpPost httpPost = newHttpPost(URL);//指定报文头Content-type、User-Agent
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader("Authorization", "Bearer " +token);
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
StringEntity stringEntity= new StringEntity(message, "UTF-8");
stringEntity.setContentType("application/json");
httpPost.setEntity(stringEntity);//执行请求操作,并拿到结果(同步阻塞)
CloseableHttpResponse response =client.execute(httpPost);//获取结果实体
HttpEntity entity =response.getEntity();if (entity != null) {//按指定编码转换结果实体为String类型
body = EntityUtils.toString(entity, "UTF-8");
}
EntityUtils.consume(entity);//释放链接
response.close();//System.out.println("body:" + body);
} catch(Exception ex) {
ex.printStackTrace();
}finally{try{
client.close();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}returnbody;
}private static SSLContext createIgnoreVerifySSL() throwsNoSuchAlgorithmException, KeyManagementException {
SSLContext sc= SSLContext.getInstance("SSLv3");//实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
X509TrustManager trustManager = newX509TrustManager() {
@Overridepublic voidcheckClientTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
String paramString)throwsCertificateException {
}
@Overridepublic voidcheckServerTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
String paramString)throwsCertificateException {
}
@Overridepublicjava.security.cert.X509Certificate[] getAcceptedIssuers() {return null;
}
};
sc.init(null, new TrustManager[] { trustManager }, null);returnsc;
}private static class TrustAnyTrustManager implementsX509TrustManager {public void checkClientTrusted(X509Certificate[] chain, String authType) throwsCertificateException {
}public void checkServerTrusted(X509Certificate[] chain, String authType) throwsCertificateException {
}publicX509Certificate[] getAcceptedIssuers() {return newX509Certificate[] {};
}
}private static class TrustAnyHostnameVerifier implementsHostnameVerifier {public booleanverify(String hostname, SSLSession session) {return true;
}
}public staticString sendSSLPostRequest(String url, String param) {
PrintWriter out= null;
BufferedReader in= null;
String result= "";try{//URLEncoder.encode(param,"UTF-8");
URL realUrl= newURL(url);
URLConnection conn=realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Encoding", "utf-8");
conn.setRequestProperty("Charsert", "utf-8");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setDoOutput(true);
conn.setDoInput(true);if (conn instanceofHttpsURLConnection) {
SSLContext sc= SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, newjava.security.SecureRandom());
((HttpsURLConnection) conn).setSSLSocketFactory(sc.getSocketFactory());
((HttpsURLConnection) conn).setHostnameVerifier(newTrustAnyHostnameVerifier());
}
out= new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));
out.print(param);
out.flush();
in= new BufferedReader(newInputStreamReader(conn.getInputStream()));
String line;while ((line = in.readLine()) != null) {
result+=line;
}
}catch(Exception e) {
System.out.println("POST 请求异常!!!" +e);
e.printStackTrace();
}finally{try{if (out != null) {
out.close();
}if (in != null) {
in.close();
}
}catch(IOException ex) {
ex.printStackTrace();
}
}returnresult;
}
}