本文主要摘自网络资源,感谢各位大神的无私的奉献!!!!
最近开发微信公众号,发现微信的各种请求全是POST(HTTPS),在网上找了相关内容,如下:
1、建立一个证书类:
import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; /** * 证书信任管理器(用于https请求) */ 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.建立一个POST传输类
import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.URL;import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager;/**
* 公众平台通用接口工具类 * */ public class WeixinUtil {/**
* 发起https请求并获取结果 * * requestUrl * 请求地址 * requestMethod * 请求方式(GET、POST) * outputStr * 提交的数据 * String */ public static String httpRequest(String requestUrl, String requestMethod, String outputStr) { String result = null; StringBuffer buffer = new StringBuffer(); try { // 创建SSLContext对象,并使用我们指定的信任管理器初始化 TrustManager[] tm = { new MyX509TrustManager() }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); // 从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);
HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection(); httpUrlConn.setSSLSocketFactory(ssf);httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true); httpUrlConn.setUseCaches(false); // 设置请求方式(GET/POST) httpUrlConn.setRequestMethod(requestMethod);if ("GET".equalsIgnoreCase(requestMethod))
httpUrlConn.connect();// 当有数据需要提交时
if (null != outputStr) { OutputStream outputStream = httpUrlConn.getOutputStream(); // 注意编码格式,防止中文乱码 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); }// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;
while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } bufferedReader.close(); inputStreamReader.close(); // 释放资源 inputStream.close(); // inputStream = null; httpUrlConn.disconnect(); result = buffer.toString(); // jsonObject = JSONObject.fromObject(buffer.toString()); } catch (ConnectException ce) { ce.printStackTrace(); // log.error("Weixin server connection timed out."); } catch (Exception e) { e.printStackTrace(); // log.error("https request error:{}", e); } return result; } public static void main(String[] args) { String requestUrl = " https://api.weixin.qq.com/cgi-bin/menu/create?" + "access_token=ACCESS_TOKEN"; String requestMethod = "POST"; String outputStr = " {\"button\":[{\"type\":\"click\",\"name\":\"今日歌曲111\",\"key\":\"V1001_TODAY_MUSIC\"}," + "{\"name\":\"菜单\",\"sub_button\":[{\"type\":\"view\",\"name\":\"搜索\",\"url\":\"http://www.soso.com/\"}," + "{\"type\":\"view\",\"name\":\"视频\",\"url\":\"http://v.qq.com/\"}," + "{\"type\":\"click\",\"name\":\"赞一下我们\",\"key\":\"V1001_GOOD\"}]}]}"; String result = WeixinUtil.httpRequest(requestUrl, requestMethod, outputStr); System.out.println("result:"+result); } }