编程环境:Eclipse 2019-03
1,标准使用流程
//1. 创建一个URL类的对象url
URL url = new URL("网址");
//2. 通过URL类的对象url打开网络连接 , 并得到连接对象conn
URLConnection conn = url.openConnection();
//3. 通过连接对象 , 得到用于读取网页内容的输入流 is
InputStream is = conn.getInputStream();
//4. 将上述的字节流is 装饰为字符流 , 将字符流再装饰为一次能读取一行的字符流br
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//5. 通过字符流br,读取一行内容,并将内容存储到变量text中
String text = br.readLine();
//6. 可以将读取到的内容text 输出显示到控制台
System.out.println(text);
2,可能遇到的问题
1,语句下出现红色波浪线?
- 可能是因为没有导入相应的包,将鼠标悬停上方,选择相应的io.*或net.*包点击添加即可;
- 导包后,部分语句需要抛出异常,将鼠标悬停上方,根据提示直接抛出即可;
2,URL有输入参数,怎样添加?
- 字符串拼接:“网址”+“?”+“key1=value1” + “&” + “key2=value2” + “&” + ……
3,输入参数为中文,出现乱码怎么处理?
- 比如搜索栏中的网址为
- 可是复制下来之后却变成https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E6%A4%8D%E7%89%A9%E5%A4%A7%E6%88%98%E5%83%B5%E5%B0%B8
- 因为网址中的值传给服务器时也有可能发生乱码
- 借助于URLEncoder类,将汉字转换为 % + 十六进制 的形式
String para = URLEncoder.encode("植物大战僵尸", "UTF-8"); URL url = new URL("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=" + para);
4,从服务器获取的值为乱码该如何处理?
- 在字节流转换为字符流时,加上编码标准"UTF-8"即可;
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
3,短信发送完整代码
package com.kaikeba.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class Demo2 {
public static void main(String[] args) throws IOException {
// 导包时选择io*或net*
String para = URLEncoder.encode("恭喜你,作业已完成!验证码是:666666。如非本人操作,请忽略本短信!【开课吧新职课】", "UTF-8");
// 1,创建URL类的对象url
URL url = new URL("https://api.jisuapi.com/sms/send?"+"appkey=62958a3a6ef3c56d" +
"&mobile=你的电话号码" + "&content="+para);
// 2,通过url对象获取链接,并连接到URLConnection对象conn
URLConnection conn = url.openConnection();
// 3,通过链接对象获得用于读取网页内容的输入流is
InputStream is = conn.getInputStream();
// 4,将字节流装饰为字符流,再将字符流装饰为能读取一行的字符流br
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
// 5,通过字符流读取一行数据存放在String变量text中
String text = br.readLine();
// 6,输出
System.out.println(text);
}
}
运行结果如下:
{"status":0,"msg":"ok","result":{"accountid":15790,"msgid":"159616775433015720448","count":1}}