实现短信验证码的发送[JAVA]
如何实现短信验证码的发送
一、基础知识补充
1、编码
2、URL
3、字节流与字符流
二、短信验证码编程实现
一、基础知识补充
1、编码
常见的编码:UTF-8 GBK Unicode GB2312 、、、
在这里插入图片描述 编码有什么用呢?相信大家在编程程序的时候,经常出现乱码的情况,而这就是编译环境中的编码与当前的文字编码不同,从而导致的。那么出现这种情况该如何解决呢?这里提供两种思路,如果遇到这种情况,大家自行进行修改。
1、通过设置,从而设置该编写工具的编译环境。
2、通过代码对内容进行编码,从而达到满足当前环境的标准
个人小tip:
建议不要动编译环境中的编码设置,除非当前满足真的无法满足项目的绝大多数编码情况。尽量使用代码进行转化)
代码实现
假设我们这里需要将文字转化为 UTF-8,可以通过这样的编程实现其编码的实现
String pare = URLEncoder.encode("你好","UTF-8");
1
2、URL
【菜鸟教程】对URL的定义:
URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址。表示为互联网上的资源,如网页或者FTP地址。
其实URL可以分为以下几个部分:
1、协议为(protocol):http
2、主机为(host:port):www.runoob.com
3、端口号为(port): 80 ,以上URL实例并未指定端口,因为 HTTP 协议默认的端口号为 80。
4、文件路径为(path):/index.html
5、请求参数(query):language=cn
6、 定位位置(fragment):j2se,定位到网页中 id 属性为 j2se 的 HTML 元素位置 。
比如:http://www.runoob.com/index?language=cn#j2se
在java.net包中定义了URL类,我们使用该类用来处理有关URL的内容。同时java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源。
URL url = new URL("https://api.jisuapi.com/sms/send?appkey=62958a3a6ef3c56d&mobile=电话号码&content="+content);
1
要实现短信验证功能,这里我们需要短信的发送AIP:https://api.jisuapi.com/sms/send【此API已失效】这里给出其相关参数与短信API,只是提供供学习。
在这里插入图片描述
3、字节流与字符流
字节流
字节流就是在读取的时候,读到一个字节就返回一个字节。字节流处理单元为 1 个字 节,分别有操作字节和字节数组。字节流可以处理所有类型数据,如:MP3、AVI视频文件、图片、歌曲使用字节流就比较好。字节流主要是操作 byte类型数据,以 byte数组为准。
主要操作类就是OutputStream,InputStream
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class WriterDemo {
// 异常抛出,不处理
public static void main(String[] args) throws Exception {
// 第1步:使用File类找到一个文件
// 声明File 对象
File f = new File("d:" + File.separator + "txt.txt");
// 第2步:准备好一个输出的对象 通过子类实例化父类对象
Writer out = null;
// 通过对象多态性进行实例化
out = new FileWriter(f);
// 第3步:准备一个字符串
String str = "Hello World!!!";
// 进行写操作
out.write(str);
// 将内容输出
// 第4步:关闭输出流(此时没有关闭)
out.close();
//如果不关闭字节流,那么一样可以获取文本中的数据,因为它没有缓冲区
}
}
字符流
字符流处理的单元为 2 个字节的 Unicode字符,分别有操作字符、字符数组或字符串,所以字符流是由 Java虚拟机将字节转化为 2 个字节的 Unicode字符为单位的字符而成的, 所以它对多国语言支持性比较好!如果是关系到中文(文本)的,用字符流好点。在程序中一个字符等于两个字节,只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。同时字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在 UTF-8码表中是 3 个字节)时,会先去查指定的编码表,将查到的字符返回。字符流使用了缓冲区,而字节流没有使用缓冲区,如果当在操作字符流时,没有关闭字符流,那么数据将放在缓冲区无法读取出来。需要关闭之后才能获取数据。
java提供了 Reader、Writer两个专门操作字符流的类。
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class WriterDemo04 {
// 异常抛出不处理
public static void main(String[] args) throws Exception {
// 第1步:使用File类找到一个文件
// 声明File对象
File f = new File("d:" + File.separator + "test.txt");
// 第2步:准备好一个输出的对象 通过子类实例化父类对象
Writer out = null;
// 通过对象多态性进行实例化
out = new FileWriter(f);
// 第3步:准备一个字符串
String str = "Hello World!!!";
// 进行写操作
out.write(str);
// 将内容输出
out.flush();
// 强制性清空缓冲区中的内容
// 第4步:关闭输出流
out.close();
//如果不关闭字符流,那么缓冲区中的数据无法获取到
}
}
二、短信验证码编程实现
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class test{
public static void main(String[] args) throws IOException{
// 实现步骤
// 1、将中文参数转换为编码进行处理
//此处根据各自开通的短信API的content内容进行填写
String pare = URLEncoder.encode("恭喜你,短信发送成功!验证码是:666666 。如非本人操作,请忽略本短信!","UTF-8");
// 2、创建一个URL类的对象
//根据各自开通的短信API进行填写此处的API URL
URL url = new URL("https://api.jisuapi.com/sms/send?appkey=62958a3a6ef3a56d&mobile=电话号码&content="+pare);
// 3、通过URL类的队长url的打开网络连接的功能,来打开网络连接
// 并得到一个URLConnection连接的对象 conn
URLConnection conn = url.openConnection();
// 4、通过连接对象conn,得到用于读取网页内容的字节流is,
InputStream is = conn.getInputStream();
//5、将上述的字节流is,装饰为字符输入流,将字符输入流再装饰为带有缓冲功能,能一次读取一行的字符输入流br
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
// 6、通过字符输入流br,读取一行数据,并将内容赋值给变量text
String text = br.readLine();
// 7、将读取到的内容,展示到控制台
System.out.print(text);
}
}
【实现结果】
在这里插入图片描述在这里插入图片描述