微信企业号请求数据基类封装
2014-09-10 19:05
411 查看
微信企业号请求数据基类封装:
微信开发调用接口操作,需要封装请求操作基类,方便我们完成数据读取操作,因此需要封装常用的方法。
首先封装发起http请求并获取结果的2个类:一个返回JSONObject对象,一个返回byte[]字节数组。
此处需要一个枚举类:
以上是对httprequest 请求类的封装。
微信开发调用接口操作,需要封装请求操作基类,方便我们完成数据读取操作,因此需要封装常用的方法。
首先封装发起http请求并获取结果的2个类:一个返回JSONObject对象,一个返回byte[]字节数组。
import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; import java.security.SecureRandom; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import xxx.Enum.EnumMethod; import net.sf.json.JSONObject; public class HttpRequestUtil { /** * 发起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) { System.err.println(requestMethod+"\toutputStr="+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()); //System.out.println("jsonObject="+jsonObject); } catch (ConnectException ce) { ce.printStackTrace(); System.out.println("网络链接失败!"); } catch (Exception e) { e.printStackTrace(); } return jsonObject; } /** * 发起https请求并获取字节数组结果 * @param requestUrl * @param requestMethod * @param data * @return */ public static byte[] httpRequest_byte(String requestUrl, String requestMethod, byte[] data) { ByteArrayOutputStream out = new ByteArrayOutputStream(); try { if (requestMethod == EnumMethod.GET.name() && data != null && data.length > 0) { if (requestUrl.indexOf('?') > 0) { requestUrl += '&'; } else { requestUrl += '?'; } requestUrl += new String(data); } URL url = new URL(requestUrl); HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); if (httpUrlConn instanceof HttpsURLConnection) { // 创建SSLContext对象,并使用我们指定的信任管理器初始化 TrustManager[] tm = { new MyX509TrustManager() }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new SecureRandom()); // 从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); ((HttpsURLConnection) httpUrlConn).setSSLSocketFactory(ssf); } boolean truePost = requestMethod == EnumMethod.POST.name() && data != null && data.length > 0; httpUrlConn.setDoOutput(truePost); httpUrlConn.setDoInput(true); httpUrlConn.setUseCaches(false); // 设置请求方式(GET/POST) httpUrlConn.setRequestMethod(requestMethod); if (requestMethod == EnumMethod.GET.name()) { httpUrlConn.connect(); } else if (truePost) { // 提交数据 OutputStream outputStream = httpUrlConn.getOutputStream(); outputStream.write(data); outputStream.close(); } // 读取返回数据 InputStream inputStream = httpUrlConn.getInputStream(); byte[] buf = new byte[1024 * 2]; int len; while ((len = inputStream.read(buf)) != -1) { out.write(buf, 0, len); } // 释放资源 out.close(); inputStream.close(); inputStream = null; httpUrlConn.disconnect(); } catch (ConnectException ce) { } catch (Exception e) { } return out.toByteArray(); } }
此处需要一个枚举类:
package xxx.Enum; public enum EnumMethod { GET,POST; }
以上是对httprequest 请求类的封装。
相关文章推荐
- 微信企业号请求数据基类封装:
- mvp基类+retrofit封装 请求数据
- 关于项目中的一些经验:封装activity、service的基类,封装数据对象
- c#基类 常用数据验证的封装,数字,字符,邮箱的验证
- 源码推荐(12.16B):仿滴滴广告弹出页,AF数据请求封装
- iOS数据库离线缓存思路和网络层封装——网络请求基类封装
- iOS---对AFNetworking进行二次封装,使用单例单独处理网络请求数据
- 使用commons-beanutils封装请求中的数据与数据类型的转换,web中使用md5和BASE64Encoder加密
- 同步异步网络请求封装以及数据JSON解析
- 数据操作层的基类,主要封装了数据的增,删,改,查功能
- 基于AFNetWorking 3.0封装网络请求数据的类
- struts1自动封装用户的请求数据
- 微信公众号开发系列-Http请求封装基类
- ios网络学习------8 xml格式数据的请求处理 用代码块封装
- Android中应对封装好的数据库jar包请求Http数据的结果回调
- 老赖 封装的一个 数据 请求函数 HTTPENGINE
- 封装 block 请求网络数据
- c#基类 常用数据验证的封装,数字,字符,邮箱的验证
- httpclient模拟post请求json封装表单数据
- 数据操作层的基类,主要封装了数据的增,删,改,查功能