当前位置:网站首页>SMS SMS
SMS SMS
2022-06-24 12:37:00 【Catch wind and shadow】
Tool class :
package com.xunqi.common.utils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/** * @Description: * @Created: with IntelliJ IDEA. * @author: Summer foam stops water * @createTime: 2020-06-27 09:33 **/
public class HttpUtils {
/** * get * * @param host * @param path * @param method * @param headers * @param querys * @return * @throws Exception */
public static HttpResponse doGet(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpGet request = new HttpGet(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
/** * post form * * @param host * @param path * @param method * @param headers * @param querys * @param bodys * @return * @throws Exception */
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
Map<String, String> bodys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (bodys != null) {
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
for (String key : bodys.keySet()) {
nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
}
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
request.setEntity(formEntity);
}
return httpClient.execute(request);
}
/** * Post String * * @param host * @param path * @param method * @param headers * @param querys * @param body * @return * @throws Exception */
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
String body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (StringUtils.isNotBlank(body)) {
request.setEntity(new StringEntity(body, "utf-8"));
}
return httpClient.execute(request);
}
/** * Post stream * * @param host * @param path * @param method * @param headers * @param querys * @param body * @return * @throws Exception */
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
byte[] body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (body != null) {
request.setEntity(new ByteArrayEntity(body));
}
return httpClient.execute(request);
}
/** * Put String * @param host * @param path * @param method * @param headers * @param querys * @param body * @return * @throws Exception */
public static HttpResponse doPut(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
String body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPut request = new HttpPut(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (StringUtils.isNotBlank(body)) {
request.setEntity(new StringEntity(body, "utf-8"));
}
return httpClient.execute(request);
}
/** * Put stream * @param host * @param path * @param method * @param headers * @param querys * @param body * @return * @throws Exception */
public static HttpResponse doPut(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
byte[] body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPut request = new HttpPut(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (body != null) {
request.setEntity(new ByteArrayEntity(body));
}
return httpClient.execute(request);
}
/** * Delete * * @param host * @param path * @param method * @param headers * @param querys * @return * @throws Exception */
public static HttpResponse doDelete(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
StringBuilder sbUrl = new StringBuilder();
sbUrl.append(host);
if (!StringUtils.isBlank(path)) {
sbUrl.append(path);
}
if (null != querys) {
StringBuilder sbQuery = new StringBuilder();
for (Map.Entry<String, String> query : querys.entrySet()) {
if (0 < sbQuery.length()) {
sbQuery.append("&");
}
if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
sbQuery.append(query.getValue());
}
if (!StringUtils.isBlank(query.getKey())) {
sbQuery.append(query.getKey());
if (!StringUtils.isBlank(query.getValue())) {
sbQuery.append("=");
sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
}
}
}
if (0 < sbQuery.length()) {
sbUrl.append("?").append(sbQuery);
}
}
return sbUrl.toString();
}
private static HttpClient wrapClient(String host) {
HttpClient httpClient = new DefaultHttpClient();
if (host.startsWith("https://")) {
sslClient(httpClient);
}
return httpClient;
}
private static void sslClient(HttpClient httpClient) {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] xcs, String str) {
}
@Override
public void checkServerTrusted(X509Certificate[] xcs, String str) {
}
};
ctx.init(null, new TrustManager[] {
tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx);
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = httpClient.getConnectionManager();
SchemeRegistry registry = ccm.getSchemeRegistry();
registry.register(new Scheme("https", 443, ssf));
} catch (KeyManagementException ex) {
throw new RuntimeException(ex);
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException(ex);
}
}
}
Components :
@ConfigurationProperties(prefix = "spring.cloud.alicloud.sms")
@Data
@Component
public class SmsComponent {
private String host;
private String path;
private String skin;
private String sign;
private String appcode;
public void sendCode(String phone,String code) {
String method = "GET";
Map<String, String> headers = new HashMap<String, String>();
// Last in header In the format ( In the middle is an English space ) by Authorization:APPCODE 83359fd73fe94948385f570e3c139105
headers.put("Authorization", "APPCODE " + appcode);
Map<String, String> querys = new HashMap<String, String>();
querys.put("code", code);
querys.put("phone", phone);
querys.put("skin", skin);
querys.put("sign", sign);
//JDK 1.8 Please download the sample code here : http://code.fegine.com/Tools.zip
try {
/** * Important tips are as follows : * HttpUtils Please from * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java * Or download it directly : * http://code.fegine.com/HttpUtils.zip * download * * Please refer to * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml * relevant jar package ( Not pom) Direct download : * http://code.fegine.com/aliyun-jar.zip Encapsulate the response body */
HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
//System.out.println(response.toString()); If not output json, Please open this line of code , Print debug header status code .
// Status code : 200 normal ;400 URL Invalid ;401 appCode error ; 403 Run out of times ; 500 API Network management error
// obtain response Of body
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Controller
@RequestMapping(value = "/sms")
public class SmsSendController {
@Resource
private SmsComponent smsComponent;
/** * Provided to other services for calling * @param phone * @param code * @return */
@GetMapping(value = "/sendCode")
public R sendCode(@RequestParam("phone") String phone, @RequestParam("code") String code) {
// Send verification code
smsComponent.sendCode(phone,code);
return R.ok();
}
}
To configure :
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
alicloud:
sms:
host: https://fesms.market.alicloudapi.com
path: /sms/
skin: 1
sign: 175622
appcode: b0563c23aff8428c97a54d4f7f9e28e5
边栏推荐
- The world's largest meat processor has been "blackmailed", how many industries will blackmail virus poison?
- Flink snapshot analysis: operators for locating large states and data skew
- Identification of new prognostic DNA methylation features in uveal melanoma by 11+ based on methylation group and transcriptome analysis~
- How does easygbs, a national standard platform, solve the problem that information cannot be carried across domains?
- Collation of related papers on root cause analysis
- 使用开源工具 k8tz 优雅设置 Kubernetes Pod 时区
- How to check the situation that the national standard platform easygbs equipment video cannot be accessed by grabbing packets?
- Install MySQL in docker and modify my CNF profile
- Opencv learning notes - matrix normalization normalize() function
- Practice of dynamic load balancing based on open source tars
猜你喜欢

Ten thousand campus developers play AI in a fancy way. It's enough to see this picture!

How can a shell script (.Sh file) not automatically close or flash back after execution?
Deep parsing and implementation of redis pub/sub publish subscribe mode message queue

文本转语音功能上线,可以体验专业播音员的服务,诚邀试用

GTEST from getting started to getting started

从《梦华录》的争议性,谈谈数字版权作品的价值泡沫

巴比特 | 元宇宙每日必读:618成绩已然揭晓,在这份还算满意的答卷背后,数字藏品做出了多少贡献?...

Opencv learning notes - Discrete Fourier transform

一纸英雄帖,激起千层浪,横跨10国,一线大厂都派人来了!-GWEI 2022-新加坡

Opencv learning notes - regions of interest (ROI) and image blending
随机推荐
最新热点:使用铜死亡相关基因进行肿瘤预后分型!
How does easygbs, a national standard platform, solve the problem that information cannot be carried across domains?
A flaw in R markdown: folders cannot have Chinese
Simple and flexible permission design?
Install MySQL in docker and modify my CNF profile
The world's largest meat processor has been "blackmailed", how many industries will blackmail virus poison?
OpenGL es shared context for multi-threaded rendering
JVM GC garbage collection detailed introduction quick check of learning notes
How does the video networking / network penetration tool easynts permanently delete one of the devices?
MySQL 外键影响
Pipeline post instruction
巴比特 | 元宇宙每日必读:618成绩已然揭晓,在这份还算满意的答卷背后,数字藏品做出了多少贡献?...
Go basic series | 1 Leading
Continuous testing | test process improvement: practice continuous testing within iterations in coding
Examples of AES and RSA encryption operations implemented by php7.1
The operation and maintenance boss laughed at me. Don't you know that?
Ghost, a synonym for blog system
Popular science of data annotation: ten common image annotation methods
9+! Predicting lymph node status from histology of colorectal cancer by deep learning
Opencv learning notes - cv:: mat class