您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > 小程序

使用java开发微信公众号系列-公共类

时间:2021-06-16 09:54:07  来源:今日头条  作者:java浮萍
使用java开发微信公众号系列-公共类

 

 

在开发微信公众号时,需要不时请求URL和数据封装。为了不做重复的工作。提取公共部分进行封装。产生了相应的公众类。今天先来写下请求类,代码如下:

public class HttpRequestProxy {

/**

* 连接超时

*/

private static int connectTimeOut = 5000;

/**

* 读取数据超时

*/

private static int readTimeOut = 10000;

/**

* 发送GET的HTTP请求

* @param reqUrl HTTP请求URL

* @param parameters 参数映射表

* @param recvEncoding 请求编码

* @return HTTP响应的字符串

*/

public static String doGet(String reqUrl, Map<String,String> parameters,

String recvEncoding) {

HttpURLConnection url_con = null;

String responseContent = null;

try {

 

//请求URL的封装

url_con = doHttpGetConnection(reqUrl,parameters);

InputStream in = url_con.getInputStream();

BufferedReader rd = new BufferedReader(new InputStreamReader(in,

recvEncoding));

String tempLine = rd.readLine();

StringBuffer temp = new StringBuffer();

String crlf = System.getProperty("line.separator");

while (tempLine != null) {

temp.Append(tempLine);

temp.append(crlf);

tempLine = rd.readLine();

}

responseContent = temp.toString();

rd.close();

in.close();

} catch (IOException e) {

 

} finally {

if (url_con != null) {

url_con.disconnect();

}

}

return responseContent;

}

/**

* 请求URL的封装

* @param reqUrl HTTP请求URL

* @param parameters 参数映射表

* @return URL的封装

* @throws IOException

*/

private static HttpURLConnection doHttpGetConnection(String reqUrl,

Map<String,String> parameters) throws IOException {

HttpURLConnection url_con = null;

String params = getMapParamsToStr(parameters,WeiXinConstant.REQUEST_ENCODING);

 

URL url = new URL(reqUrl);

url_con = (HttpURLConnection) url.openConnection();

url_con.setRequestMethod(WeiXinConstant.REQUEST_GET);

url_con.setConnectTimeout(
HttpRequestProxy.connectTimeOut);// (单位:毫秒)

url_con.setReadTimeout(
HttpRequestProxy.readTimeOut);// (单位:毫秒)

 

url_con.setDoOutput(true);

OutputStreamWriter out = new OutputStreamWriter(url_con.getOutputStream(),WeiXinConstant.REQUEST_ENCODING);

out.write(params);

out.flush();

out.close();

 

return url_con;

}

/**

* 发送POST的HTTP请求

*

* @param reqUrl HTTP请求URL

* @param parameters 参数映射表

* @param recvEncoding

* @return HTTP响应的字符串

*/

public static String doPost(String reqUrl, Map<String, String> parameters, String recvEncoding) {

HttpURLConnection url_con = null;

String responseContent = null;

try {

URL url = new URL(reqUrl);

url_con = (HttpURLConnection) url.openConnection();

url_con.setConnectTimeout(
HttpRequestProxy.connectTimeOut);// (单位:毫秒)

url_con.setReadTimeout(
HttpRequestProxy.readTimeOut);// (单位:毫秒)

url_con.setRequestMethod(WeiXinConstant.REQUEST_POST);

if (parameters!=null) {

url_con.setDoOutput(true);

String params = getMapParamsToStr(parameters, WeiXinConstant.REQUEST_ENCODING);

OutputStreamWriter out = new OutputStreamWriter(url_con.getOutputStream(),

WeiXinConstant.REQUEST_ENCODING);

out.write(params);

out.flush();

out.close();

}

InputStream in = url_con.getInputStream();

BufferedReader rd = new BufferedReader(new InputStreamReader(in, recvEncoding));

String tempLine = rd.readLine();

StringBuffer tempStr = new StringBuffer();

String crlf = System.getProperty("line.separator");

while (tempLine != null) {

tempStr.append(tempLine);

tempStr.append(crlf);

tempLine = rd.readLine();

}

responseContent = tempStr.toString();

rd.close();

in.close();

} catch (IOException e) {

 

} finally {

if (url_con != null) {

url_con.disconnect();

}

}

return responseContent;

}

/**

* 发送POST的JSON HTTP请求

*

* @param reqUrl HTTP请求URL

* @param parameters 参数映射表

* @param recvEncoding

* @return HTTP响应的字符串

*/

public static String doJsonPost(String reqUrl, Map<String, String> parameters, String jsonData) {

HttpURLConnection url_con = null;

String responseContent = null;

try {

String params = getMapParamsToStr(parameters, WeiXinConstant.REQUEST_ENCODING);

URL url = new URL(reqUrl + "&" + params);

url_con = (HttpURLConnection) url.openConnection();

url_con.setRequestMethod(WeiXinConstant.REQUEST_POST);

url_con.setConnectTimeout(
HttpRequestProxy.connectTimeOut);// (单位:毫秒)

url_con.setReadTimeout(
HttpRequestProxy.readTimeOut);// (单位:毫秒)

url_con.setDoOutput(true);


url_con.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式


url_con.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式

OutputStreamWriter out = new OutputStreamWriter(url_con.getOutputStream(), WeiXinConstant.REQUEST_ENCODING);

out.write(jsonData);

out.flush();

out.close();

InputStream in = url_con.getInputStream();

BufferedReader rd = new BufferedReader(new InputStreamReader(in, WeiXinConstant.REQUEST_ENCODING));

String tempLine = rd.readLine();

StringBuffer tempStr = new StringBuffer();

String crlf = System.getProperty("line.separator");

while (tempLine != null) {

tempStr.append(tempLine);

tempStr.append(crlf);

tempLine = rd.readLine();

}

responseContent = tempStr.toString();

rd.close();

in.close();

} catch (IOException e) {

 

} finally {

if (url_con != null) {

url_con.disconnect();

}

}

return responseContent;

}

/**

* post 文件的封装

* @param reqUrl HTTP请求URL

* @param parameters 参数映射表

* @param encoding 编码

* @param fileIn 数据流

* @param file 文件

* @param contentType 传输类型

* @param name 传输名称

* @return 响应结果

*/

public static String uploadMedia(String reqUrl, Map<String, String> parameters, String encoding,

InputStream fileIn, File file, String contentType,String name) {

HttpURLConnection url_con = null;

String responseContent = null;

try {

// 设置边界

String BOUNDARY = "----------" + System.currentTimeMillis();

String params = getMapParamsToStr(parameters, WeiXinConstant.REQUEST_ENCODING);

URL urlObj = new URL(reqUrl + "&" + params.toString());

// 连接

url_con = (HttpURLConnection) urlObj.openConnection();

/**

* 设置关键值

*/

url_con.setRequestMethod(
WeiXinConstant.REQUEST_POST); // 以Post方式提交表单,默认get方式

url_con.setDoInput(true);

url_con.setDoOutput(true);

url_con.setUseCaches(false); // post方式不能使用缓存

// 设置请求头信息

url_con.setRequestProperty("Connection", "Keep-Alive");

url_con.setRequestProperty("Charset", encoding);

// 设置边界

url_con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

// 请求正文信息

// 第一部分:

StringBuilder sb = new StringBuilder();

sb.append("--"); // 必须多两道线

sb.append(BOUNDARY);

sb.append("rn");

sb.append("Content-Disposition: form-data;name=""+name+"";filelength="" + file.length() + "";filename=""

+ file.getName() + ""rn");

sb.append("Content-Type:application/octet-streamrnrn");

byte[] head = sb.toString().getBytes(encoding);

// 获得输出流

OutputStream out = new DataOutputStream(url_con.getOutputStream());

// 输出表头

out.write(head);

// 文件正文部分

// 把文件已流文件的方式 推入到url中

DataInputStream in = new DataInputStream(fileIn);

int bytes = 0;

byte[] bufferOut = new byte[1024];

while ((bytes = in.read(bufferOut)) != -1) {

out.write(bufferOut, 0, bytes);

}

in.close();

// 结尾部分

byte[] foot = ("rn--" + BOUNDARY + "--rn").getBytes(encoding);// 定义最后数据分隔线

out.write(foot);

out.flush();

out.close();

InputStream iddn = url_con.getInputStream();

BufferedReader rd = new BufferedReader(new InputStreamReader(iddn, encoding));

 

String tempLine = rd.readLine();

StringBuffer tempStr = new StringBuffer();

String crlf = System.getProperty("line.separator");

while (tempLine != null) {

tempStr.append(tempLine);

tempStr.append(crlf);

tempLine = rd.readLine();

}

responseContent = tempStr.toString();

rd.close();

} catch (IOException e) {

 

} finally {

if (url_con != null) {

url_con.disconnect();

}

}

return responseContent;

}

/**

* 将参数转换成string

*

* @param paramMap 参数映射表

* @param requestEncoding 编码

* @return

* @throws UnsupportedEncodingException

*/

private static String getMapParamsToStr(Map<String, String> paramMap, String requestEncoding) throws IOException {

StringBuffer params = new StringBuffer();

// 设置边界

Set<String> set = paramMap.keySet();

for (String key : set) {

params.append(key);

params.append("=");

params.append(URLEncoder.encode(paramMap.get(key), requestEncoding));

params.append("&");

}

if (params.length() > 0) {

params = params.deleteCharAt(params.length() - 1);

}

return params.toString();

}

}



Tags:公共类   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在开发微信公众号时,需要不时请求URL和数据封装。为了不做重复的工作。提取公共部分进行封装。产生了相应的公众类。今天先来写下请求类,代码如下:public class HttpRequestP...【详细内容】
2021-06-16  Tags: 公共类  点击:(134)  评论:(0)  加入收藏
▌简易百科推荐
一、项目背景随着小程序在用户规模和商业化上取得的极大成功,各大平台都推出了自己的小程序。然而这些平台的小程序开发在语法上又不尽相同,不同平台小程序代码的维护需要投入...【详细内容】
2021-11-05  携程技术    Tags:小程序   点击:(65)  评论:(0)  加入收藏
作者:灰灰来源:JS每日一题 一、背景传统的web开发实现登陆功能,一般的做法是输入账号密码、或者输入手机号及短信验证码进行登录服务端校验用户信息通过之后,下发一个代表登录态...【详细内容】
2021-10-29  Nodejs开发    Tags:微信小程序   点击:(43)  评论:(0)  加入收藏
总结列举微信小程序开放能力清单 硬件能力 蓝牙 NFC读写 连接WIFI设备 开放能力 ...【详细内容】
2021-09-27  软件开发分享    Tags:微信小程序   点击:(60)  评论:(0)  加入收藏
核心商城(CoreShop)介绍核心小程序商城系统(CoreShop) 是基于 Asp.Net 5.0、Uni-App开发、支持可视化布局的小程序商城系统;前后端分离,支持分布式部署,跨平台运行;拥有分销、代理、...【详细内容】
2021-07-20  码农也有梦想    Tags:小程序商城   点击:(115)  评论:(0)  加入收藏
介绍Vue3发布已经有一段时间了,从目前来看,其生态还算可以,也已经有了各种组件库给予了支持,但是不管是Vue3还是Vue2都无法直接用来开发小程序,因此国内一些技术团队针对Vue开发...【详细内容】
2021-07-13  爱分享Coder    Tags:小程序   点击:(203)  评论:(0)  加入收藏
首先明确几个概念1. W3C:指万维网联盟(World Wide Web Consortium),是一个国际的标准的制定机构。2. H5(HTML5,HyperText Markup Language 5的缩写),HTML5 是由W3C制定的新HTML标...【详细内容】
2021-07-06  畅游零和一的海洋    Tags:微信小程序   点击:(152)  评论:(0)  加入收藏
在开发微信公众号时,需要不时请求URL和数据封装。为了不做重复的工作。提取公共部分进行封装。产生了相应的公众类。今天先来写下请求类,代码如下:public class HttpRequestP...【详细内容】
2021-06-16  java浮萍  今日头条  Tags:公共类   点击:(134)  评论:(0)  加入收藏
小程序上线后,改版了很多次,包括一些 Api 接口也有改动。如果你学习一个很久之前的小程序项目是没有意义的,本文推荐的小程序都是最近有更新的。相信在你学习、部署的过程中,不...【详细内容】
2021-06-08    程序猿久一  Tags:微信小程序   点击:(206)  评论:(0)  加入收藏
自从2019年微信公开课Pro在微信之夜演示《跳一跳》以来,微信小游戏已经不知不觉走过的三年,这三年中我们可以明显看到微信对小游戏的扶持,对于微信开发者来说,微信小游戏开发以...【详细内容】
2021-05-25  开课吧科科  今日头条  Tags:微信小游戏   点击:(212)  评论:(0)  加入收藏
学习编程从hello world开始。学习微信小程序开发首先要安装一个微信开发者工具,官网上免费下载童叟无欺,下载完傻瓜式安装即可。 双击微信开发者工具,然后选择小程序,然后点击...【详细内容】
2021-05-12  程序员fearlazy  fearlazy  Tags:微信小程序   点击:(268)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条