微信企业号开发之请求数据基类封装
白羽 2018-06-20 来源 :网络 阅读 966 评论 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
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程