白羽
2018-06-20
来源 :网络
阅读 1617
评论 0
摘要:本文将带你了解微信企业号请求数据基类封装,希望本文对大家学微信有所帮助。
微信开发调用接口操作,需要封装请求操作基类,方便我们完成数据读取操作,因此需要封装常用的方法。
首先封装发起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 请求类的封装。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号