|
@ -2,7 +2,6 @@ package com.epmet.commons.tools.utils; |
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.epmet.commons.tools.dto.form.DingTalkTextMsg; |
|
|
import com.epmet.commons.tools.dto.form.DingTalkTextMsg; |
|
|
import com.epmet.commons.tools.exception.EpmetErrorCode; |
|
|
|
|
|
import com.google.common.collect.Lists; |
|
|
import com.google.common.collect.Lists; |
|
|
import org.apache.commons.codec.binary.Base64; |
|
|
import org.apache.commons.codec.binary.Base64; |
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
import org.apache.commons.lang3.StringUtils; |
|
@ -13,13 +12,9 @@ import org.springframework.stereotype.Component; |
|
|
import javax.annotation.PreDestroy; |
|
|
import javax.annotation.PreDestroy; |
|
|
import javax.crypto.Mac; |
|
|
import javax.crypto.Mac; |
|
|
import javax.crypto.spec.SecretKeySpec; |
|
|
import javax.crypto.spec.SecretKeySpec; |
|
|
import java.io.BufferedReader; |
|
|
|
|
|
import java.io.IOException; |
|
|
import java.io.IOException; |
|
|
import java.io.InputStreamReader; |
|
|
|
|
|
import java.io.PrintWriter; |
|
|
|
|
|
import java.net.URL; |
|
|
|
|
|
import java.net.URLConnection; |
|
|
|
|
|
import java.net.URLEncoder; |
|
|
import java.net.URLEncoder; |
|
|
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
import java.util.concurrent.ArrayBlockingQueue; |
|
|
import java.util.concurrent.ArrayBlockingQueue; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
@ -104,7 +99,7 @@ public class DingdingMsgSender { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private Thread getThread() { |
|
|
private Thread getThread() { |
|
|
Thread sendMsgThread = new Thread("MsgSender-Thread") { |
|
|
return new Thread("MsgSender-Thread") { |
|
|
@Override |
|
|
@Override |
|
|
public void run() { |
|
|
public void run() { |
|
|
while (running) { |
|
|
while (running) { |
|
@ -112,7 +107,6 @@ public class DingdingMsgSender { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
return sendMsgThread; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -139,77 +133,19 @@ public class DingdingMsgSender { |
|
|
try { |
|
|
try { |
|
|
String stringToSign = timestamp + "\n" + param.getSecret(); |
|
|
String stringToSign = timestamp + "\n" + param.getSecret(); |
|
|
Mac mac = Mac.getInstance("HmacSHA256"); |
|
|
Mac mac = Mac.getInstance("HmacSHA256"); |
|
|
mac.init(new SecretKeySpec(param.getSecret().getBytes("UTF-8"), "HmacSHA256")); |
|
|
mac.init(new SecretKeySpec(param.getSecret().getBytes(StandardCharsets.UTF_8), "HmacSHA256")); |
|
|
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); |
|
|
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); |
|
|
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); |
|
|
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); |
|
|
String url = param.getWebHook(); |
|
|
String url = param.getWebHook(); |
|
|
url = url.concat("×tamp=" + timestamp + "&sign=" + sign); |
|
|
url = url.concat("×tamp=" + timestamp + "&sign=" + sign); |
|
|
String jsonStrParam = param.getMsgContent(); |
|
|
String jsonStrParam = param.getMsgContent(); |
|
|
result = this.sendPostByJSON(url, jsonStrParam); |
|
|
result = HttpClientManager.getInstance().sendPostByJSON(url, jsonStrParam); |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
logger.warn("sendPostByJSON error", e); |
|
|
logger.warn("sendPostByJSON error", e); |
|
|
} |
|
|
} |
|
|
return result; |
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 发送POST 请求 |
|
|
|
|
|
* |
|
|
|
|
|
* @param url 发送请求的 URL |
|
|
|
|
|
* @param param 请求参数,JSON格式 |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
public Result<String> sendPostByJSON(String url, String param) throws IOException { |
|
|
|
|
|
if (StringUtils.isEmpty(url) || StringUtils.isEmpty(param)) { |
|
|
|
|
|
throw new IllegalArgumentException("参数不能为空"); |
|
|
|
|
|
} |
|
|
|
|
|
PrintWriter out = null; |
|
|
|
|
|
BufferedReader in = null; |
|
|
|
|
|
String result = ""; |
|
|
|
|
|
try { |
|
|
|
|
|
URL realUrl = new URL(url); |
|
|
|
|
|
// 打开和URL之间的连接
|
|
|
|
|
|
URLConnection conn = realUrl.openConnection(); |
|
|
|
|
|
// 设置通用的请求属性
|
|
|
|
|
|
conn.setRequestProperty("accept", "*/*"); |
|
|
|
|
|
conn.setRequestProperty("Content-Type", "application/json"); |
|
|
|
|
|
conn.setRequestProperty("connection", "Keep-Alive"); |
|
|
|
|
|
conn.setRequestProperty("user-agent", |
|
|
|
|
|
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); |
|
|
|
|
|
// 发送POST请求必须设置如下两行
|
|
|
|
|
|
conn.setDoOutput(true); |
|
|
|
|
|
conn.setDoInput(true); |
|
|
|
|
|
// 获取URLConnection对象对应的输出流
|
|
|
|
|
|
out = new PrintWriter(conn.getOutputStream()); |
|
|
|
|
|
// 发送请求参数
|
|
|
|
|
|
out.print(param); |
|
|
|
|
|
// flush输出流的缓冲
|
|
|
|
|
|
out.flush(); |
|
|
|
|
|
// 定义BufferedReader输入流来读取URL的响应
|
|
|
|
|
|
in = new BufferedReader( |
|
|
|
|
|
new InputStreamReader(conn.getInputStream())); |
|
|
|
|
|
String line; |
|
|
|
|
|
while ((line = in.readLine()) != null) { |
|
|
|
|
|
result += line; |
|
|
|
|
|
} |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
logger.warn("sendPostByJSON error", e); |
|
|
|
|
|
return new Result<String>().error(EpmetErrorCode.SERVER_ERROR.getCode(), e.getMessage()); |
|
|
|
|
|
} finally { |
|
|
|
|
|
try { |
|
|
|
|
|
if (out != null) { |
|
|
|
|
|
out.close(); |
|
|
|
|
|
} |
|
|
|
|
|
if (in != null) { |
|
|
|
|
|
in.close(); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (IOException ex) { |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
return new Result<String>().ok(result); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
public static void main(String[] args) { |
|
|
for (int i = 0; i < 50; i++) { |
|
|
for (int i = 0; i < 50; i++) { |
|
|
|
|
|
|
|
|