一、网址详解
网址的组成部分:
通信协议://域名:端口号/虚拟路径?参数列表#锚点
通信协议:
- 传输速率控制
- 传输编码控制
- 出错控制
域名:
- ip地址的别名
- ip地址:是计算机在互联网中的唯一标识(公网ip)
- DNS服务商
- 在浏览器中输入网址,会首先访问dns服务商,dns服务商会返回该域名对应的ip地址,随后浏览器通过ip访问。
端口号:
-
范围:0~65535
http协议访问时,可以忽略端口号,自动寻找80
https协议访问时,也可以忽略端口号,自动寻找443
参数列表(重要):
- 访问网络时,给服务器发送的参数内容。
- 参数列表由多个参数组成,参数与参数之间使用&连接
- 每一个参数又由参数名称和参数内容
例:www.baidu.com/s?wd=腾讯视频
二、URL类概述及使用案例
统一资源定位符(Uniform Resource Locator)
在万维网上(world wide web)每一个信息和资源都有统一且唯一的地址。
标准使用流程:
//1. 创建一个URL类对象
URL url = new URL("网址");
//2. 通过URL类的对象url打开网络连接,并得到连接对象conn
URLConnection conn = url.openConnection();
//3. 通过连接对象,得到用于读取网页内容的输入流(字节流)
InputStream is = conn.getInputStream();
//4. 将上述的字节流is 装饰为字符流, 后将字符流再装饰为一次读取一行的字符流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//5. 通过字符流br,读取一行内容,并将内容存储到变量text中
String text = br.readLine();
//6. 将读取到的内容text 输出显示到控制台
System.out.println(text);
案例一、疫情数据读取与分析:
package com.demut.tasks;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class YQDate {
public static void main(String[] args) throws IOException {
URL url = new URL("https://zaixianke.com/yq/all");//注:数据来源于开课吧平台
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));
String text = br.readLine();
System.out.println(text);
}
}
运行结果:(此处未显示完全)
案例二、与图灵机器人交流:
package com.demut.tasks;
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 Turing {
public static void main(String[] args) throws IOException {
String para = URLEncoder.encode("北京天气怎么样","UTF-8");
URL url = new URL("https://api.jisuapi.com/iqa/query?appkey=62958a3a6ef3c56d&question=" + para);//数据来源于开课吧平台
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String text = br.readLine();
System.out.println(text);
}
}
运行结果:(此处未显示完全)
三、乱码的处理
计算机存储的都是数字
编码表:ASCII (65-A、66-B、67-C、97-a)
简体中文国标系列编码:GBK GB2312 GB18030
万国码:UTF-8
处理代码如下:在字节流装饰为字符流时指定字符集(依照目标网页编码而定)。
BufferedReader br = new BufferedReader(new InputStreamReader(is,"gb2312"));
参数乱码的处理:
将发送给服务器的中文进行URL编码即可
URL编码:将中文转换为%+英文字母+阿拉伯数字
String para = URLEncoder.encode("中文文字","UTF-8");