一、认识网址
网址的组成:协议://域名:端口号/虚拟路径?参数列表#锚点
协议: 用于计算机与计算机之间交流的协议,用于传输速率,传输编码,出错的控制等。
常用协议:
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类的相关使用。对于自定义发送短信验证码,找了好多相关的第三方工具所提供的短信服务,不是短信签名过不了审核就是注册后需要相关的认证材料。只不过使用网建这个在发送短信上,存在一些问题。