第一次发博,发个简单的Java程序发送手机短信验证

最近在准备一个项目,想的登录时候用手机验证,就通过上网查阅了一下手机验证的实现方法,原来超级简单,下面将一步一步介绍。

1.去中国网建注册一个账号密码,首次注册送五条免费短信和3条免费彩信。具体的网址是

http://www.smschinese.cn/api.shtml

2.注册完成之后进去查看给你的短信秘钥

3.有了这个秘钥就超级简单了,导入jar包,下面的代码第一个基本不用该,直接粘贴,第二个改成自己的信息就可以了

  1 package duanxinyanzheng;
  2
  3
  4 import java.io.IOException;
  5 import java.net.URL;
  6 import java.util.ArrayList;
  7 import java.util.HashMap;
  8 import java.util.List;
  9 import java.util.Map;
 10
 11 import org.apache.http.HttpEntity;
 12 import org.apache.http.NameValuePair;
 13 import org.apache.http.client.config.RequestConfig;
 14 import org.apache.http.client.entity.UrlEncodedFormEntity;
 15 import org.apache.http.client.methods.CloseableHttpResponse;
 16 import org.apache.http.client.methods.HttpGet;
 17 import org.apache.http.client.methods.HttpPost;
 18 import org.apache.http.conn.ssl.DefaultHostnameVerifier;
 19 import org.apache.http.conn.util.PublicSuffixMatcher;
 20 import org.apache.http.conn.util.PublicSuffixMatcherLoader;
 21 import org.apache.http.impl.client.CloseableHttpClient;
 22 import org.apache.http.impl.client.HttpClients;
 23 import org.apache.http.message.BasicNameValuePair;
 24 import org.apache.http.util.EntityUtils;
 25
 26
 27 public class HttpClientUtil {
 28     private RequestConfig requestConfig = RequestConfig.custom()
 29             .setSocketTimeout(15000)
 30             .setConnectTimeout(15000)
 31             .setConnectionRequestTimeout(15000)
 32             .build();
 33
 34     private static HttpClientUtil instance = null;
 35     private HttpClientUtil(){}
 36     public static HttpClientUtil getInstance(){
 37         if (instance == null) {
 38             instance = new HttpClientUtil();
 39         }
 40         return instance;
 41     }
 42
 43     /**
 44      * 发送 post请求
 45      * @param httpUrl 地址
 46      */
 47     public String sendHttpPost(String httpUrl) {
 48         HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
 49         return sendHttpPost(httpPost,"utf-8");
 50     }
 51
 52
 53     /**
 54      * 发送 post请求
 55      * @param httpUrl 地址
 56      * @param maps 参数
 57      *  @param type 字符编码格式
 58      */
 59     public String sendHttpPost(String httpUrl, Map<String, String> maps,String type) {
 60         HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
 61         // 创建参数队列
 62         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
 63         for (String key : maps.keySet()) {
 64             nameValuePairs.add(new BasicNameValuePair(key, maps.get(key)));
 65         }
 66         try {
 67             httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, type));
 68         } catch (Exception e) {
 69             e.printStackTrace();
 70         }
 71         return sendHttpPost(httpPost,type);
 72     }
 73
 74     /**
 75      * 发送Post请求
 76      * @param httpPost
 77      * @return
 78      */
 79     private String sendHttpPost(HttpPost httpPost,String reponseType) {
 80         CloseableHttpClient httpClient = null;
 81         CloseableHttpResponse response = null;
 82         HttpEntity entity = null;
 83         String responseContent = null;
 84         try {
 85             // 创建默认的httpClient实例.
 86             httpClient = HttpClients.createDefault();
 87             httpPost.setConfig(requestConfig);
 88             // 执行请求
 89             response = httpClient.execute(httpPost);
 90             entity = response.getEntity();
 91             responseContent = EntityUtils.toString(entity, reponseType);
 92         } catch (Exception e) {
 93             e.printStackTrace();
 94         } finally {
 95             try {
 96                 // 关闭连接,释放资源
 97                 if (response != null) {
 98                     response.close();
 99                 }
100                 if (httpClient != null) {
101                     httpClient.close();
102                 }
103             } catch (IOException e) {
104                 e.printStackTrace();
105             }
106         }
107         return responseContent;
108     }
109
110     /**
111      * 发送 get请求
112      * @param httpUrl
113      */
114     public String sendHttpGet(String httpUrl) {
115         HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求
116         return sendHttpGet(httpGet);
117     }
118
119     /**
120      * 发送 get请求Https
121      * @param httpUrl
122      */
123     public String sendHttpsGet(String httpUrl) {
124         HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求
125         return sendHttpsGet(httpGet);
126     }
127
128     /**
129      * @Title: sendMsgUtf8
130      * @Description: TODO(发送utf8)
131      * @param: @param Uid
132      * @param: @param Key
133      * @param: @param content
134      * @param: @param mobiles
135      * @param: @return
136      * @date: 2017-3-22 下午5:58:07
137      * @throws
138      */
139     @SuppressWarnings({ "rawtypes", "unchecked" })
140     public int sendMsgUtf8(String Uid,String Key,String content,String mobiles){
141         Map maps = new HashMap();
142         maps.put("Uid", Uid);
143         maps.put("Key", Key);
144         maps.put("smsMob", mobiles);
145         maps.put("smsText", content);
146         String result = sendHttpPost("http://utf8.sms.webchinese.cn", maps, "utf-8");
147         return Integer.parseInt(result);
148     }
149
150     /**
151      * @Title: sendMsgUtf8
152      * @Description: TODO(发送utf8)
153      * @param: @param Uid
154      * @param: @param Key
155      * @param: @param content
156      * @param: @param mobiles
157      * @param: @return
158      * @return: int
159      * @author:  ly
160      * @date: 2017-3-22 下午5:58:07
161      * @throws
162      */
163     @SuppressWarnings({ "rawtypes", "unchecked" })
164     public int sendMsgGbk(String Uid,String Key,String content,String mobiles){
165         Map maps = new HashMap();
166         maps.put("Uid", Uid);
167         maps.put("Key", Key);
168         maps.put("smsMob", mobiles);
169         maps.put("smsText", content);
170         String result = sendHttpPost("http://gbk.sms.webchinese.cn", maps, "gbk");
171         return Integer.parseInt(result);
172     }
173
174     /**
175      * 发送Get请求
176      * @param httpPost
177      * @return
178      */
179     private String sendHttpGet(HttpGet httpGet) {
180         CloseableHttpClient httpClient = null;
181         CloseableHttpResponse response = null;
182         HttpEntity entity = null;
183         String responseContent = null;
184         try {
185             // 创建默认的httpClient实例.
186             httpClient = HttpClients.createDefault();
187             httpGet.setConfig(requestConfig);
188             // 执行请求
189             response = httpClient.execute(httpGet);
190             entity = response.getEntity();
191             responseContent = EntityUtils.toString(entity, "UTF-8");
192         } catch (Exception e) {
193             e.printStackTrace();
194         } finally {
195             try {
196                 // 关闭连接,释放资源
197                 if (response != null) {
198                     response.close();
199                 }
200                 if (httpClient != null) {
201                     httpClient.close();
202                 }
203             } catch (IOException e) {
204                 e.printStackTrace();
205             }
206         }
207         return responseContent;
208     }
209
210     /**
211      * 发送Get请求Https
212      * @param httpPost
213      * @return
214      */
215     private String sendHttpsGet(HttpGet httpGet) {
216         CloseableHttpClient httpClient = null;
217         CloseableHttpResponse response = null;
218         HttpEntity entity = null;
219         String responseContent = null;
220         try {
221             // 创建默认的httpClient实例.
222             PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.load(new URL(httpGet.getURI().toString()));
223             DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher);
224             httpClient = HttpClients.custom().setSSLHostnameVerifier(hostnameVerifier).build();
225             httpGet.setConfig(requestConfig);
226             // 执行请求
227             response = httpClient.execute(httpGet);
228             entity = response.getEntity();
229             responseContent = EntityUtils.toString(entity, "UTF-8");
230         } catch (Exception e) {
231             e.printStackTrace();
232         } finally {
233             try {
234                 // 关闭连接,释放资源
235                 if (response != null) {
236                     response.close();
237                 }
238                 if (httpClient != null) {
239                     httpClient.close();
240                 }
241             } catch (IOException e) {
242                 e.printStackTrace();
243             }
244         }
245         return responseContent;
246     }
247
248     /**
249      * @Title: getErrorMsg
250      * @Description: TODO(返回异常原因)
251      * @param: @param errorCode
252      */
253     public String getErrorMsg(int errorCode){
254         if(errorCode==-1){
255             return "没有该用户账户";
256         }else if(errorCode==-2){
257             return "接口密钥不正确";
258         }else if(errorCode==-3){
259             return "短信数量不足";
260         }else if(errorCode==-4){
261             return "手机号格式不正确";
262         }else if(errorCode==-21){
263             return "MD5接口密钥加密不正确";
264         }else if(errorCode==-11){
265             return "该用户被禁用";
266         }else if(errorCode==-14){
267             return "短信内容出现非法字符";
268         }else if(errorCode==-41){
269             return "手机号码为空";
270         }else if(errorCode==-42){
271             return "短信内容为空";
272         }else if(errorCode==-51){
273             return "短信签名格式不正确";
274         }else if(errorCode==-6){
275             return "IP限制";
276         }else{
277             return "未知错误码:"+errorCode;
278         }
279     }
280 }  

这就是测试代码,里面的内容改成你自己的。

 1 package duanxinyanzheng;
 2
 3 import java.util.HashMap;
 4 import java.util.Map;
 5
 6 /**
 7  * @Title: http://www.smschinese.cn/api.shtml
 8  * @date 2011-3-22
 9  * @version V1.2
10  */
11 public class test {
12
13     //用户名
14     private static String Uid = "你自己的";
15
16     //接口安全秘钥
17     private static String Key = "你的秘钥(不是登录密码)";
18
19     //手机号码,多个号码如13800000000,13800000001,13800000002
20     private static String smsMob = "18434391711";
21
22     //短信内容
23     private static String smsText = "这是自己的测试!【这是验证格式的必须填】";
24
25
26     public static void main(String[] args) {
27
28         HttpClientUtil client = HttpClientUtil.getInstance();
29
30         //UTF发送
31         int result = client.sendMsgUtf8(Uid, Key, smsText, smsMob);
32         if(result>0){
33             System.out.println("UTF8成功发送条数=="+result);
34         }else{
35             System.out.println(client.getErrorMsg(result));
36         }
37     }
38 }

上述就可以运行了,是不是超级简单,以前觉得好深奥。上面需要注意 秘钥不是登录密码,内容后面要加上【公司名称】,便于接口进行校验。

三个需要的Jar包可以在上面的网址中下载。

时间: 2025-01-01 14:00:40

第一次发博,发个简单的Java程序发送手机短信验证的相关文章

简单实现发送手机短信

C#简单实现发送手机短信 偶然想起,像编写一个从电脑向手机发送短信的程序,从网上查找到有三种方式:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备,这个就不考虑了(3)使用中国网建提供的SMS短信平台,但是,用完几条免费的后,就要收费了. 首先,我用C#实现第一种方法,发现总是错误,这个不解,后来从网上查找原因,有的说,新浪这个功能已

JAVA发送手机短信

<p><span>JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备,呵呵;</span></p> import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient

利用java实现的一个发送手机短信的小例子

今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备,呵呵(3)使用中国网建提供的SMS短信平台(申请账号地址:http://sms.webchinese.cn/de

java实现发送国际短信的功能

由于公司的客户遍布全球,最近会有一些要发送海外的短信的需求,所以今天想说下发送国际短信的功能,接入的手续和一般的短信验证码也差不太多.由于之前已经合作了互亿无线短信平台的短信验证码功能,那么顺理成章看看他们家有没有国际短信,结果对接起来也太方便了,代码也不怎么需要修改,接口改一下好了,很方便,用了个把小时就弄完了,新功能做得飞快,现在送上代码,你们可以参考一下,如果也同样接入互亿无线短信平台的朋友,可以直接用哈哈. ?/*** Created by bingone on 15/12/16.*/ 

利用js、html以及Css简单制作了一个模拟手机短信发送

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>MyPhoneSend</title> <style type="text/css"> #phoneOut{ width: 320px; height: 500px; border:1px solid #333; border-radius: 10px; margi

一个简单的Java程序

一个.NET技术还是很菜的水平的猿人现在要去学习Java不知道是坏是好,无从得知啊! 不过在网上看了好多Java方面的简单例子,感觉Java还是蛮不错的么!不管以后怎么样啦,先开始自己的Java菜鸟之旅吧! 建立一个Java项目,建立一个属于自己的包,然后就开始自己的Java之旅... 创建的时候勾上这个生成main方法的选项,这个好像类似与我们.Net程序里控制台程序有木有.... 创建完成后就是这么一个样子,可以看到我们的包,还有给我们创建好自己的类,并且带了一个静态的main方法咋看就像.

java基础学习02(简单的java程序)

简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 二.一个简单的java程序 public class TestJava{ public static void main(String [] args){ //操作一个简单的范例,输出和乘方 int num = 10; //定义一个整型变量 num = 30; //修改变量 System.out.p

Linux环境下部署完JDK后运行一个简单的Java程序

前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version"命令是否有正确的内容打印,也许这并不具备太大的说服力.可能能够运行起一个正确的java程序来,不管从感性角度还是理性角度来说,都会有一个更好的认识. 所以本文写一段很简单的java代码,并且在Linux环境下编译运行,以证明JDK部署得确实没有问题. 代码验证JDK部署是否正确 1.级联建立两个目录 首

编写运行最简单的java程序——使用记事本编写java程序

第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. 连接地址:http://www.cnblogs.com/hysum/p/7084380.html 现在我们可以通过使用记事本来编辑我们的第一个java小程序. 第一步 .使用记事本编辑程序代码 用记事本编写的是java的源代码文件,里面的代码就是我们平时学习的java代码.生成的文件后缀是.java