Java基于http协议读取互联网web网站
- 简介
- 实例
- 一、读取指定城市的天气预报
- 二、给指定手机号码发送验证码
- 总结+参考
简介
- 网址组成分析
网址的组成:
协议://域名:端口号/虚拟路径?参数列表#锚点
协议:用于计算机与计算机之间交流的协议,用于传输速率,传输编码,出错的控制等等。
http:超文本传输协议,默认端口号:80
https:安全超文本传输协议,默认端口号:443
域名:ip地址的别名,是计算机在互联网中的唯一表示,such as 192.168.1.1
端口号:范围:0-65535
虚拟路径:通过路劲的方式,来管理服务器中的文件资源。
参数列表:向服务器发送的数据,每一个参数都是一个键值对,键和值之间通过=号连接,多个键值对之间通过&分割。
实例
在eclipse中创建一个Java工程,此操作自行百度
一、读取指定城市的天气预报
- 创建test2.java
连接智能机器人API服务器地址:https://api.jisuapi.com/iqa/query
appkey:秘钥,值为:62958a3a6ef3c56d
question:与智能机器人的聊天内容 。
可以修改question的内容获取不同的回复
package duanxin;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;public class test2 {public static void main(String[] args) throws Exception {//定义字符串存放城市信息String a=URLEncoder.encode("海南天气", "UTF-8");//定义一个URL类URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question="+a);//连接服务器URLConnection conn = url.openConnection();//获取字节输入流 isInputStream is = conn.getInputStream();//把is变成能一次读取一行的字符输入流BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));//加载一行数据String text = br.readLine();//显示System.out.println(text);//释放资源br.close();}}
定义一个字符串用来存储与机器人聊天的内容,防止编码不同引起的错误。
- 运行结果
二、给指定手机号码发送验证码
- 基于上一个例子的代码
将其中定义URL类对象并实例化的代码修改如下
URL url = new URL("https://itdage.com/kkb/kkbsms?key=xzk&number=18875122423&code=631807060403");
key:秘钥,值为xzk
number:接收验证码的手机号
code:A-Za-z0-9的验证码内容
上面的代码使用的短信格式是别人固定好的,不能修改,只能修改手机号和验证码内容。格式:
【itdage】作业已完成!,验证码是xxxx。如非本人操作,请忽略!
运行可以有如下结果
- 2.0版本
参考网上资源弄了一个实现java发送手机验证码的工程
①注册中国网建的账号(不是广告)
新建账号的时候会附带赠5条免费短信。发送的时候可能存在延迟,室友就是迟迟收不到短信,频繁找客服因此还多得了10条免费的短信。
网址
用手机号注册登录成功之后页面如下
注册时手机号用来接受登录密码的,邮箱用来接受平台发的消息,其他随便写写
得到短信秘钥,跟第一个例子中的秘钥一词同义
填写签名,原本在短信秘钥获取的时候就能填写(这是操作后截的图)
②导入jar包
在短信API接口中找到Java调用的代码,下载jar包
在eclipse中导入jar包(这个网上教程也很多,有三种方式)
最快捷的一种,这种貌似运行一次就要导入一次:
创建好工程后,右键工程名
导入外部的包
编写代码:
package duanxin;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 test3 {public static void main(String[] args) throws Exception {HttpClient client = new HttpClient();PostMethod post = new PostMethod("http://utf8.api.smschinese.cn");post.addRequestHeader("ContentType", "application/x-www-form-urlencoded;charset=UTF-8");NameValuePair[] data = {new NameValuePair("Uid", "网络编程"),new NameValuePair("Key", "d41d8cd98f00b204e980"),new NameValuePair("smsMob", "13838381438"),new NameValuePair("smsText", "验证码:631807060403,xxx,cgy公司") };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("UTF-8"));System.out.println(result);post.releaseConnection();}}
收到的内容为 签名+以下代码 ,可以自行修改
new NameValuePair("smsText", "验证码:631807060403,xxx,cgy公司")
运行成功
收到短信
如果遇到如下报错
在进行了操作 去掉properties属性里的java compiler–>building–>abort build when build path errors occur 前的勾,还不能解决问题,那很不幸是你的JDK版本过高了。
总结+参考
中国网建提供的httpclient版本有点低,需要高的版本可以到此网站中下载–>网址。因为这个问题浪费了不少时间,以后还需要多多学习。
java实现手机发送验证码