HttpsURLConnection实现SSL的GET/POST请求
来源:互联网 发布:mysql删除数据库所有表 编辑:程序博客网 时间:2024/06/05 08:26
package org.nercita.weixin.util;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.X509TrustManager;/** * 证书信任管理器(用于https请求) * 这个证书管理器的作用就是让它信任我们指定的证书,下面的代码意味着信任所有证书,不管是否权威机构颁发。 * @author zhangwenchao * */public class MyX509TrustManager implements X509TrustManager{@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}}
package org.nercita.weixin.util;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; import net.sf.json.JSONException;import net.sf.json.JSONObject; import org.nercita.weixin.domain.AccessToken;import org.nercita.weixin.domain.Menu;import org.slf4j.Logger; import org.slf4j.LoggerFactory;/** * 公众平台通用接口工具类 * 用户实现https请求 * @author zhangwenchao * */public class HttpsRequestUtil {private static Logger logger = LoggerFactory.getLogger(HttpsRequestUtil.class); // 获取access_token接口的地址(GET) 限200(次/天) public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; // 菜单创建(POST) 限100(次/天) public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; /** * 发起https请求并获取结果 * * @param requestUrl 请求地址 * @param requestMethod 请求方式(GET、POST) * @param outputStr 提交的数据 * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) */ public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = 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(); jsonObject = JSONObject.fromObject(buffer.toString()); } catch (ConnectException ce) { logger.error("Weixin server connection timed out."); } catch (Exception e) { logger.error("https request error:{}", e); } return jsonObject; } /** * 获取access_token * 微信服务器会返回json格式的数据:{"access_token":"ACCESS_TOKEN","expires_in":7200} * @param appid 凭证 * @param appsecret 密钥 * @return */ public static AccessToken getAccessToken(String appid, String appsecret) { AccessToken accessToken = null; String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret); JSONObject jsonObject = httpRequest(requestUrl, "GET", null); // 如果请求成功 if (null != jsonObject) { try { accessToken = new AccessToken(); accessToken.setAccessToken(jsonObject.getString("access_token")); accessToken.setExpiresIn(jsonObject.getInt("expires_in")); } catch (JSONException e) { accessToken = null; // 获取token失败 logger.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg")); } } return accessToken; } /** * 创建菜单 * * @param menu 菜单实例 * @param accessToken 有效的access_token * @return 0表示成功,其他值表示失败 */ public static int createMenu(Menu menu, String accessToken) { int result = 0; // 拼装创建菜单的url String url = menu_create_url.replace("ACCESS_TOKEN", accessToken); // 将菜单对象转换成json字符串 String jsonMenu = JSONObject.fromObject(menu).toString(); // 调用接口创建菜单 JSONObject jsonObject = httpRequest(url, "POST", jsonMenu); if (null != jsonObject) { if (0 != jsonObject.getInt("errcode")) { result = jsonObject.getInt("errcode"); logger.error("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg")); } } return result; } }
0 2
- HttpsURLConnection实现SSL的GET/POST请求
- HttpsURLConnection实现SSL的GET/POST请求
- 使用HttpsURLConnection发送POST请求
- 使用HttpsURLConnection发送POST请求
- 使用HttpsURLConnection发送POST请求
- http的get、post请求实现方法
- 可靠的HttpUrlConnection实现get/post请求
- Java使用HttpsURLConnection进行Get和Post请求(绕过证书验证)
- java实现post,get请求
- java实现GET/POST请求
- HttpClientUtil实现post、get请求
- Android HttpsURLConnection get、post 访问网络
- java HttpsURLConnection 实现https请求
- curl实现HTTP的GET POST方法的请求
- 通过AsyncTask实现网络请求的方式,get和post
- android使用Apache HttpClient实现get/post的请求
- c++实现http的get和post请求
- Java实现Http的Post、Get、代理访问请求
- java异常处理
- ORACLE学习第一天
- HashTable的五种遍历方式
- Java字符串格式化:数字前面加0
- Unity3D中uGUI事件系统简述及使用方法总结
- HttpsURLConnection实现SSL的GET/POST请求
- 重构二叉树(Java实现)
- Android 怎么实现支持所有View的通用的下拉刷新控件
- Relational Database Management System(RDBMS) basic
- 【C语言】模拟strcmp比较两个字符串
- GCD定时器使用笔记 及 详细分析
- LNK1123: failure during conversion to COFF: file invalid or corrupt-问题解决办法
- 网口扫盲三:以太网芯片MAC和PHY的关系
- mysql 半同步复制配制