摘要:本文将带你了解微信企业号请求数据基类封装,希望本文对大家学微信有所帮助。
微信开发调用接口操作,需要封装请求操作基类,方便我们完成数据读取操作,因此需要封装常用的方法。
首先封装发起http请求并获取结果的2个类:一个返回JSONObject对象,一个返回byte[]字节数组。
[java] view plain copy 1. import java.io.BufferedReader; 2. import java.io.ByteArrayOutputStream; 3. import java.io.InputStream; 4. import java.io.InputStreamReader; 5. import java.io.OutputStream; 6. import java.net.ConnectException; 7. import java.net.HttpURLConnection; 8. import java.net.URL; 9. import java.security.SecureRandom; 10. 11. import javax.net.ssl.HttpsURLConnection; 12. import javax.net.ssl.SSLContext; 13. import javax.net.ssl.SSLSocketFactory; 14. import javax.net.ssl.TrustManager; 15. 16. import xxx.Enum.EnumMethod; 17. import net.sf.json.JSONObject; 18. 19. public class HttpRequestUtil { 20. 21. /** 22. * 发起https请求并获取结果 23. * 24. * @param requestUrl 请求地址 25. * @param requestMethod 请求方式(GET、POST) 26. * @param outputStr 提交的数据 27. * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 28. */ 29. public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) { 30. 31. System.err.println(requestMethod+"\toutputStr="+outputStr); 32. 33. JSONObject jsonObject = null; 34. StringBuffer buffer = new StringBuffer(); 35. try { 36. // 创建SSLContext对象,并使用我们指定的信任管理器初始化 37. TrustManager[] tm = { new MyX509TrustManager() }; 38. SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); 39. sslContext.init(null, tm, new java.security.SecureRandom()); 40. // 从上述SSLContext对象中得到SSLSocketFactory对象 41. SSLSocketFactory ssf = sslContext.getSocketFactory(); 42. 43. URL url = new URL(requestUrl); 44. HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection(); 45. httpUrlConn.setSSLSocketFactory(ssf); 46. 47. httpUrlConn.setDoOutput(true); 48. httpUrlConn.setDoInput(true); 49. httpUrlConn.setUseCaches(false); 50. // 设置请求方式(GET/POST) 51. httpUrlConn.setRequestMethod(requestMethod); 52. 53. if ("GET".equalsIgnoreCase(requestMethod)) 54. httpUrlConn.connect(); 55. 56. // 当有数据需要提交时 57. if (null != outputStr) { 58. OutputStream outputStream = httpUrlConn.getOutputStream(); 59. // 注意编码格式,防止中文乱码 60. outputStream.write(outputStr.getBytes("UTF-8")); 61. outputStream.close(); 62. } 63. 64. // 将返回的输入流转换成字符串 65. InputStream inputStream = httpUrlConn.getInputStream(); 66. InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); 67. BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 68. 69. String str = null; 70. while ((str = bufferedReader.readLine()) != null) { 71. buffer.append(str); 72. } 73. bufferedReader.close(); 74. inputStreamReader.close(); 75. // 释放资源 76. inputStream.close(); 77. inputStream = null; 78. httpUrlConn.disconnect(); 79. jsonObject = JSONObject.fromObject(buffer.toString()); 80. //System.out.println("jsonObject="+jsonObject); 81. } catch (ConnectException ce) { 82. ce.printStackTrace(); 83. System.out.println("网络链接失败!"); 84. } catch (Exception e) { 85. e.printStackTrace(); 86. } 87. return jsonObject; 88. } 89. 90. /** 91. * 发起https请求并获取字节数组结果 92. * @param requestUrl 93. * @param requestMethod 94. * @param data 95. * @return 96. */ 97. public static byte[] httpRequest_byte(String requestUrl, String requestMethod, byte[] data) { 98. ByteArrayOutputStream out = new ByteArrayOutputStream(); 99. try { 100. if (requestMethod == EnumMethod.GET.name() && data != null && data.length > 0) { 101. if (requestUrl.indexOf('?') > 0) { 102. requestUrl += '&'; 103. } else { 104. requestUrl += '?'; 105. } 106. requestUrl += new String(data); 107. } 108. URL url = new URL(requestUrl); 109. HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); 110. if (httpUrlConn instanceof HttpsURLConnection) { 111. // 创建SSLContext对象,并使用我们指定的信任管理器初始化 112. TrustManager[] tm = { new MyX509TrustManager() }; 113. SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); 114. sslContext.init(null, tm, new SecureRandom()); 115. // 从上述SSLContext对象中得到SSLSocketFactory对象 116. SSLSocketFactory ssf = sslContext.getSocketFactory(); 117. ((HttpsURLConnection) httpUrlConn).setSSLSocketFactory(ssf); 118. } 119. boolean truePost = requestMethod == EnumMethod.POST.name() && data != null && data.length > 0; 120. httpUrlConn.setDoOutput(truePost); 121. httpUrlConn.setDoInput(true); 122. httpUrlConn.setUseCaches(false); 123. // 设置请求方式(GET/POST) 124. httpUrlConn.setRequestMethod(requestMethod); 125. 126. if (requestMethod == EnumMethod.GET.name()) { 127. httpUrlConn.connect(); 128. } else if (truePost) { 129. // 提交数据 130. OutputStream outputStream = httpUrlConn.getOutputStream(); 131. outputStream.write(data); 132. outputStream.close(); 133. } 134. 135. // 读取返回数据 136. InputStream inputStream = httpUrlConn.getInputStream(); 137. byte[] buf = new byte[1024 * 2]; 138. int len; 139. while ((len = inputStream.read(buf)) != -1) { 140. out.write(buf, 0, len); 141. } 142. // 释放资源 143. out.close(); 144. inputStream.close(); 145. inputStream = null; 146. httpUrlConn.disconnect(); 147. } catch (ConnectException ce) { 148. } catch (Exception e) { 149. } 150. return out.toByteArray(); 151. } 152. } 此处需要一个枚举类: [java] view plain copy 1. package xxx.Enum; 2. 3. public enum EnumMethod { 4. GET,POST; 5. }
以上是对httprequest 请求类的封装。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号