利用API实现获取城市的天气预报信息和给指定手机号码发送验证码——基于Java

一、认识网址

网址的组成:协议://域名:端口号/虚拟路径?参数列表#锚点

协议: 用于计算机与计算机之间交流的协议,用于传输速率,传输编码,出错的控制等。
常用协议:
http:超文本传输协议,默认端口号:80
https:安全超文本传输协议,默认端口号:443
域名:ip地址的别名。ip地址是计算机在互联网中的唯一表示,192.168.1.1
端口号:范围:0-65535,其中0~1023有特殊含义。
虚拟路径:通过路径的方式,来管理服务器中的文件资源。
参数列表:向服务器发送的数据,每一个参数都是一个键值对,键和值之间通过=号连接,多个键值对之间通过&分割。

二、获取城市的天气预报信息

代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class Getweather {
    
    

	public static void main(String[] args) throws IOException {
    
    
		// TODO Auto-generated method stub
		String weather=URLEncoder.encode("重庆天气","UTF-8");
		//1. 	先准备一个URL类的对象 u
		URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question="+weather);
		//2. 	打开服务器连接,得到连接对象 conn
		URLConnection conn = url.openConnection();
		//3. 	获取加载数据的字节输入流 is
		InputStream is = conn.getInputStream();
		//4.	将is装饰为能一次读取一行的字符输入流 br
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
		//5.	加载一行数据
		String text = br.readLine();
		//6.	显示		
		//截取相关内容
		int i=text.indexOf("content");
		int j=text.indexOf("relquestion");
		String text1=text.substring(i+10, j-3);
		int m=text1.indexOf("<5.4m\\/s\\r\\n");
		String text2="";
		text2=text1.substring(m+12, text1.length());
		text1=text1.substring(0, m);
		System.out.println(text1);
		System.out.println(text2);
		//7.	释放资源	
		br.close();
	}
}

相关说明
智能机器人API服务器地址
https://api.jisuapi.com/iqa/query
参数列表
appkey(秘钥):62958a3a6ef3c56d
question:与智能机器人的聊天内容
运行结果
在这里插入图片描述
实现查询任意城市天气

//在开始处,添加如下代码
String wea="";
Scanner reader=new Scanner(System.in);
System.out.println("请输入要查询天气的城市:");
wea=reader.next();
String weather=URLEncoder.encode(wea+"天气","UTF-8");

运行效果
在这里插入图片描述

三、给指定手机号码发送验证码

代码

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

public class SendMessage {
    
    

	public static void main(String[] args) throws Exception {
    
    
		// TODO Auto-generated method stub
		//关键使用步骤:
		//1. 	先准备一个URL类的对象 u
		URL url = new URL("https://itdage.com/kkb/kkbsms?key=xzk&number=要发送信息的目的电话号码&code=验证码");
		//2. 	打开服务器连接,得到连接对象 conn
		URLConnection conn = url.openConnection();
		//3. 	获取加载数据的字节输入流 is
		InputStream is = conn.getInputStream();
		//4.	将is装饰为能一次读取一行的字符输入流 br
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
		//5.	加载一行数据
		String text = br.readLine();
		//6.	显示
		System.out.println(text);
		//7.	释放资源
		br.close();
	}
}

相关说明
短信API服务器地址:
https://itdage.com/kkb/kkbsms
参数列表
key:秘钥,值为:xzk
number:接收验证码的手机号
code:A-Za-z0-9的验证码内容。
对应电话号码会收到如下信息
在这里插入图片描述
该方式是利用已经建好的API进行调用实现的。

四、实现自定义短信内容的短信验证码发送

本来想使用阿里云提供的短信服务,可是无法通过短信签名请求的审核,就无法实现该服务的使用。后面在网上查找其他相关服务和室友的帮助下,找到下面这个工具
http://www.smschinese.cn/api.shtml
1.注册一个账号
在这里插入图片描述
2.登录
默认会免费赠送5条信息。选择快捷菜单中的发送短信后,在里面设置签名。设置完成后,回到首页,点击短信API接口,就可以看到相关的代码示例。
在这里插入图片描述
3.相关代码
①下载相关的jar包,并导入到工程中
jar下载地址:
commons-logging-1.1.1.jar
commons-httpclient-3.1.jar
commons-codec-1.4.jar
②创建一个类(包含main函数)
③添加代码

import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
public class SendMsg_webchinese {
    
    
	public static void main(String[] args)throws Exception
	{
    
    
	HttpClient client = new HttpClient();
	PostMethod post = new PostMethod("http://gbk.api.smschinese.cn");
	post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码
	NameValuePair[] data ={
    
     
				new NameValuePair("Uid", "本站用户名"),//Uid指的是注册时的用户名
				new NameValuePair("Key", "接口安全秘钥"),
				new NameValuePair("smsMob","手机号码"),//发送短信的目的手机号
				new NameValuePair("smsText","验证码:8888")};//对应短信内容
	post.setRequestBody(data);
	client.executeMethod(post);
	Header[] headers = post.getResponseHeaders();
	int statusCode = post.getStatusCode();
	System.out.println("statusCode:"+statusCode);
	for(Header h : headers)
	{
    
    
	System.out.println(h.toString());
	}
	String result = new String(post.getResponseBodyAsString().getBytes("gbk"));
	System.out.println(result); //打印返回消息状态
	post.releaseConnection();
	}
}

接口安全密钥的查看(默认一般相同)
在这里插入图片描述
可能出现下面问题
在这里插入图片描述
产生原因主要是jdk版本的问题,我是将jdk的版本修改成jdk1.8,就没有这个报错了。
修改jdk版本的方法,参考下面链接
https://blog.csdn.net/zeal9s/article/details/85090545
最终结果是对应的手机会收到像上面类似的短信。但是,这个网站发送短信存在一些问题,就是发送完短信后,可能收不到对应的短信,不知道是什么原因。

五、小结

本过程主要是对于调用API的一个认识。在使用API,来实现一些相关服务,编程上会简化很多。当然,也是对于Java基本内容的一个回顾,主要包含对于string类的相关使用。对于自定义发送短信验证码,找了好多相关的第三方工具所提供的短信服务,不是短信签名过不了审核就是注册后需要相关的认证材料。只不过使用网建这个在发送短信上,存在一些问题。

六、参考资料

Java 实现手机发送短信验证码

猜你喜欢

转载自blog.csdn.net/qq_43279579/article/details/111876234