java https post请求并忽略证书,参数放在body中
1 新建java类,作用是绕过证书用
package cn.smartercampus.core.util; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; public class MyX509TrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }
2 https post请求
package cn.smartercampus.core.util; import javax.net.ssl.*; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Map; public class HttpsPostUtil { //添加主机名验证程序类,设置不验证主机 private final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }; //添加信任主机 private static void trustAllHosts() { // 创建不验证证书链的信任管理器 这里使用的是x509证书 TrustManager[] trustAllCerts = new TrustManager[]{new MyX509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{}; } public void checkClientTrusted(X509Certificate[] chain, String authType) { } public void checkServerTrusted(X509Certificate[] chain, String authType) { } }}; // 安装所有信任的信任管理器 try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); //HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。 HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } } /** * 发送post 数据 * @param urls * @return */ public static String heart(String urls, String param, String contentType, String method) { StringBuffer sb=new StringBuffer(); DataOutputStream out = null; BufferedReader responseReader = null; InputStream in1 = null; try { trustAllHosts(); // 创建url资源 URL url = new URL(urls); // 建立http连接 HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setHostnameVerifier(DO_NOT_VERIFY); // 设置不用缓存 conn.setUseCaches(false); // 设置允许输出 conn.setDoOutput(true); // 设置允许输入 conn.setDoInput(true); // 设置传递方式 conn.setRequestMethod(method); //System.out.println(conn.getRequestMethod()); // 设置维持长连接 conn.setRequestProperty("Connection", "Keep-Alive"); // 设置文件字符集: conn.setRequestProperty("Charset", "UTF-8"); // 转换为字节数组 // byte[] data = (param).getBytes(); // // 设置文件长度 // conn.setRequestProperty("Content-Length", String.valueOf(data.length)); // 设置文件类型: conn.setRequestProperty("Content-Type", contentType); conn.setRequestProperty("Authorization", param); // 开始连接请求 conn.connect(); out = new DataOutputStream(conn.getOutputStream()); // 写入请求的字符串 out.writeBytes(param); out.flush(); //System.out.println(conn.getResponseCode()); // 请求返回的状态 if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) { System.out.println("连接成功"); // 请求返回的数据 in1 = conn.getInputStream(); String readLine; responseReader = new BufferedReader(new InputStreamReader(in1)); while((readLine=responseReader.readLine()) != null){ sb.append(readLine).append("\n"); } } else { System.out.println("error++"); } } catch (Exception e) { } finally { try { if (null != responseReader) responseReader.close(); if (null != in1) in1.close(); } catch(Exception e) {} try { out.close(); } catch(Exception e) {} } return sb.toString(); } /** * 发送post 数据 * @param urls * @return */ public static String sendPost(String urls, String param, String contentType, String method) { StringBuffer sb=new StringBuffer(); DataOutputStream out = null; BufferedReader responseReader = null; InputStream in1 = null; try { trustAllHosts(); // 创建url资源 URL url = new URL(urls); // 建立http连接 HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setHostnameVerifier(DO_NOT_VERIFY); // 设置不用缓存 conn.setUseCaches(false); // 设置允许输出 conn.setDoOutput(true); // 设置允许输入 conn.setDoInput(true); // 设置传递方式 conn.setRequestMethod(method); //System.out.println(conn.getRequestMethod()); // 设置维持长连接 conn.setRequestProperty("Connection", "Keep-Alive"); // 设置文件字符集: conn.setRequestProperty("Charset", "UTF-8"); // 转换为字节数组 // byte[] data = (param).getBytes(); // // 设置文件长度 // conn.setRequestProperty("Content-Length", String.valueOf(data.length)); // 设置文件类型: conn.setRequestProperty("Content-Type", contentType); // 开始连接请求 conn.connect(); out = new DataOutputStream(conn.getOutputStream()); // 写入请求的字符串 out.writeBytes(param); out.flush(); //System.out.println(conn.getResponseCode()); // 请求返回的状态 if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) { System.out.println("连接成功"); // 请求返回的数据 in1 = conn.getInputStream(); String readLine; responseReader = new BufferedReader(new InputStreamReader(in1)); while((readLine=responseReader.readLine()) != null){ sb.append(readLine).append("\n"); } } else { System.out.println("error++"); } } catch (Exception e) { } finally { try { if (null != responseReader) responseReader.close(); if (null != in1) in1.close(); } catch(Exception e) {} try { out.close(); } catch(Exception e) {} } return sb.toString(); } /** * map转url参数 */ public static String map2Url(Map<String, String> paramToMap) { if (null == paramToMap || paramToMap.isEmpty()) { return null; } StringBuffer url = new StringBuffer(); boolean isfist = true; for (Map.Entry<String, String> entry : paramToMap.entrySet()) { if (isfist) { isfist = false; } else { url.append("&"); } url.append(entry.getKey()).append("="); String value = entry.getValue(); if (!StringUtils.isEmpty(value)) { url.append(value); } } return url.toString(); } public static void main(String[] args) { System.out.println("123"); Map<String, String> params = new HashMap<String, String>(); params.put("client_id", "xx.cn"); params.put("client_secret", "UY83SNFJWLU32NJSLJIK"); params.put("code", "40ce7f41d6562e47dbdc33593ddce1b46444cdb93514b3aaced7be90eb51a16f"); params.put("grant_type", "authorization_code"); params.put("redirect_uri", "xxn/index.jsp"); //要发送的POST请求url?Key=Value&Key2=Value2&Key3=Value3的形式 //application/json;charset=UTF-8 application/x-www-form-urlencoded;charset=UTF-8 String sb = sendPost("https://id.pdedu.sh.cn/connect/token",map2Url(params),"application/x-www-form-urlencoded;charset=UTF-8","POST"); //System.out.println(sb); } }