java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼
最近用學(xué)習(xí)了一下調(diào)用第三方接口發(fā)送短信驗(yàn)證碼的程序,希望能夠幫助到大家。
1.首先下圖為項(xiàng)目的目錄結(jié)構(gòu),需要帶入三個(gè)包:
commons-httpclient-3.1.jar
commons-logging-1.0.4.jar
codec-1.3.jar

2.其次要?jiǎng)?chuàng)建模擬POST、GET請(qǐng)求的工具類:
package com.demo.util;
import java.io.IOException;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
public class HttpRequestUtil {
/**
* HttpClient 模擬POST請(qǐng)求
* @param url
* @param params
* @return
*/
public static String postRequest(String url, Map<String, String> params) {
//構(gòu)造HttpClient的實(shí)例
HttpClient httpClient = new HttpClient();
//創(chuàng)建POST方法的實(shí)例
PostMethod postMethod = new PostMethod(url);
//設(shè)置請(qǐng)求頭信息
postMethod.setRequestHeader("Connection", "close");
//添加參數(shù)
for (Map.Entry<String, String> entry : params.entrySet()) {
postMethod.addParameter(entry.getKey(), entry.getValue());
}
//使用系統(tǒng)提供的默認(rèn)的恢復(fù)策略,設(shè)置請(qǐng)求重試處理,用的是默認(rèn)的重試處理:請(qǐng)求三次
httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false);
//接收處理結(jié)果
String result = null;
try {
//執(zhí)行Http Post請(qǐng)求
httpClient.executeMethod(postMethod);
//返回處理結(jié)果
result = postMethod.getResponseBodyAsString();
} catch (HttpException e) {
// 發(fā)生致命的異常,可能是協(xié)議不對(duì)或者返回的內(nèi)容有問(wèn)題
System.out.println("請(qǐng)檢查輸入的URL!");
e.printStackTrace();
} catch (IOException e) {
// 發(fā)生網(wǎng)絡(luò)異常
System.out.println("發(fā)生網(wǎng)絡(luò)異常!");
e.printStackTrace();
} finally {
//釋放鏈接
postMethod.releaseConnection();
//關(guān)閉HttpClient實(shí)例
if (httpClient != null) {
((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown();
httpClient = null;
}
}
return result;
}
/**
* HttpClient 模擬GET請(qǐng)求
* 方法說(shuō)明
* @Discription:擴(kuò)展說(shuō)明
* @param url
* @param params
* @return String
*/
public static String getRequest(String url, Map<String, String> params) {
//構(gòu)造HttpClient實(shí)例
HttpClient client = new HttpClient();
//拼接參數(shù)
String paramStr = "";
for (String key : params.keySet()) {
paramStr = paramStr + "&" + key + "=" + params.get(key);
}
paramStr = paramStr.substring(1);
//創(chuàng)建GET方法的實(shí)例
GetMethod method = new GetMethod(url + "?" + paramStr);
//接收返回結(jié)果
String result = null;
try {
//執(zhí)行HTTP GET方法請(qǐng)求
client.executeMethod(method);
//返回處理結(jié)果
result = method.getResponseBodyAsString();
} catch (HttpException e) {
// 發(fā)生致命的異常,可能是協(xié)議不對(duì)或者返回的內(nèi)容有問(wèn)題
System.out.println("請(qǐng)檢查輸入的URL!");
e.printStackTrace();
} catch (IOException e) {
// 發(fā)生網(wǎng)絡(luò)異常
System.out.println("發(fā)生網(wǎng)絡(luò)異常!");
e.printStackTrace();
} finally {
//釋放鏈接
method.releaseConnection();
//關(guān)閉HttpClient實(shí)例
if (client != null) {
((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown();
client = null;
}
}
return result;
}
}
3.創(chuàng)建發(fā)送短信的方法,其中要通過(guò)短信內(nèi)容要進(jìn)行設(shè)置編碼集為utf-8,調(diào)用第三方接口傳參要按照第三方文檔規(guī)范:
package com.demo.util;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class SendMsgUtil {
/**
* 發(fā)送短信消息
* 方法說(shuō)明
* @Discription:擴(kuò)展說(shuō)明
* @param phones
* @param content
* @return
* @return String
*/
@SuppressWarnings("deprecation")
public static String sendMsg(String phones,String content) {
try {
content = java.net.URLEncoder.encode(content,"utf-8");
System.out.println(content);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//短信接口URL提交地址
String url = "https://api.dingdongcloud.com/v1/sms/sendyzm?apikey=b46c4961aa875f626b7924aace0d53f7&mobile="+phones+"&content="+content;
Map<String, String> params = new HashMap<String, String>();
params.put("zh", "賬號(hào)");
params.put("mm", "密碼");
params.put("dxlbid", "短信類別編號(hào)");
params.put("extno", "擴(kuò)展編號(hào)");
//手機(jī)號(hào)碼,多個(gè)號(hào)碼使用英文逗號(hào)進(jìn)行分割
params.put("hm", phones);
//將短信內(nèi)容進(jìn)行URLEncoder編碼
params.put("nr", URLEncoder.encode(content));
return HttpRequestUtil.getRequest(url, params);
}
/**
* 隨機(jī)生成6位隨機(jī)驗(yàn)證碼
* 方法說(shuō)明
* @Discription:擴(kuò)展說(shuō)明
* @return
* @return String
*/
public static String createRandomVcode(){
//驗(yàn)證碼
String vcode = "";
for (int i = 0; i < 6; i++) {
vcode = vcode + (int)(Math.random() * 9);
}
return vcode;
}
/**
* 測(cè)試
* 方法說(shuō)明
* @Discription:擴(kuò)展說(shuō)明
* @param args
* @return void
*/
public static void main(String[] args) {
// System.out.println(SendMsgUtil.createRandomVcode());
// System.out.println("&ecb=12".substring(1));
System.out.println(sendMsg("18201150549", "【簽名】尊敬的用戶,您的驗(yàn)證碼為" + SendMsgUtil.createRandomVcode() + ",請(qǐng)?jiān)?0分鐘內(nèi)輸入。請(qǐng)勿告訴其他人!"));
}
}
4.調(diào)用main方法可以進(jìn)行測(cè)試,如果控臺(tái)太輸出返回狀態(tài)值不是200,可以參考第三方發(fā)短信的文檔返回參數(shù)說(shuō)明。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JAVA實(shí)現(xiàn)利用第三方平臺(tái)發(fā)送短信驗(yàn)證碼
- Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法
- java實(shí)現(xiàn)短信驗(yàn)證碼5分鐘有效時(shí)間
- Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能
- 基于JAVA的短信驗(yàn)證碼api調(diào)用代碼實(shí)例
- java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例
- 基于Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的實(shí)例代碼
- Java開(kāi)發(fā)完整短信驗(yàn)證碼功能的全過(guò)程
- Java 防止短信驗(yàn)證碼接口被盜刷問(wèn)題解決
相關(guān)文章
基于SpringBoot和PostGIS的某國(guó)基地可視化實(shí)戰(zhàn)
本文以Java開(kāi)發(fā)語(yǔ)言為例,使用SpringBoot框架來(lái)進(jìn)行后臺(tái)開(kāi)發(fā),詳細(xì)講解如何使用Leaflet對(duì)PostGIS的全球基地信息進(jìn)行Web可視化,最后分享Web可視化結(jié)果,感興趣的朋友跟隨小編一起看看吧2024-08-08
解決SpringCloud gateway網(wǎng)關(guān)配置MVC攔截器報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了解決SpringCloud gateway網(wǎng)關(guān)配置MVC攔截器報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
Java抓包工具fiddler實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)
Fiddler是一個(gè)http協(xié)議調(diào)試代理工具,本文主要介紹了Java抓包工具fiddler實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類型一覽表
這篇文章主要介紹了MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類型一覽表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
查看JDK安裝路徑,一臺(tái)電腦安裝多個(gè)版本的JDK并切換使用方式
文章介紹了如何查看JDK安裝路徑以及如何在一臺(tái)電腦上安裝和切換多個(gè)版本的JDK(JDK?8、JDK?11、JDK?17),內(nèi)容涵蓋了通過(guò)命令行查看JDK路徑的方法,以及如何下載、安裝和配置多個(gè)JDK版本,并通過(guò)修改環(huán)境變量來(lái)切換JDK版本2025-12-12
Java工程中使用Mybatis (工程結(jié)合Mybatis,數(shù)據(jù)結(jié)合Swing使用))
這篇文章主要介紹了Java工程中使用Mybatis (工程結(jié)合Mybatis,數(shù)據(jù)可以結(jié)合Swing使用),需要的朋友可以參考下2017-04-04
java使用Logback配置輸出日志內(nèi)容到文件示例代碼
這篇文章主要介紹了java?Logback輸出日志內(nèi)容到文件,要將logger.info的信息輸出到文件,您可以使用Logback配置,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
SpringBoot實(shí)現(xiàn)驗(yàn)證碼的案例分享
驗(yàn)證碼可以有效防止其他人對(duì)某一個(gè)特定的注冊(cè)用戶用特定的程序,破解方式進(jìn)行不斷的登錄嘗試,我們其實(shí)很經(jīng)??吹?登錄一些網(wǎng)站其實(shí)是需要驗(yàn)證碼的,所以本文給大家分享了SpringBoot實(shí)現(xiàn)驗(yàn)證碼的案例,需要的朋友可以參考下2024-11-11
Java簡(jiǎn)單計(jì)算器的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)單計(jì)算器的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12

