Java网页访问
# Java网页访问
# URL
URL(Uniform Resource Locator),表示Internet上的资源地址。用户可通过URL进行访问网络资源。一般浏览器会对网络资源进行相应的解析 或 查找相应的文件 和 资源
示例:
protocol://resourceName
protocol: 协议名,指定获取资源使用的传输协议(如:HTTP、FTP、FILE等) resourceName: 资源名,指定资源的完整地址,有 主机名、端口号、文件名、文件内部引用等。
示例:
http://www.baidu.com/ (协议名://主机名)
http://localhost:8080/Test/admin/login.jsp (协议名://机器名: 端口号/文件名
# 类
# URL
Class URL
java.lang.Object java.net.URL
java.net包 是专门处理 URL的类 ULR
构造方法 (更多自行AIP)
URL(String spec) URL(String protocol , String host , int port , String file) URL(String protocol , String host , String file)
spec: URL地址 protocol: 协议名称 host: 主机名称 port: 主机端口号 file: 主机上的文件
方法 (更多自行AIP)
返回 | 方法 | 说明 |
---|---|---|
String | getFile() | 获取 URL路径和文件名 |
URLConnection | openConnection() | 获取 通信连接对象 |
# URLConnection
Class URLConnection
java.lang.Object java.net.URLConnection
URLConnection对象 是通过 URL对象 获取的通信连接
URLConnection(URL url) 构造方法也可以实现通信连接
方法 (更多自行AIP)
返回 | 方法 | 说明 |
---|---|---|
void | setDoInput(boolean input) | 是否进行 URL连接输入 |
void | setDoOutput(boolean output) | 是否进行 URL连接输出 |
void | setRequestProperty(String key , String value) | 设置键值对指定的常规请求属性(密钥已存在,则旧值被覆盖) |
InputStream | getInputStream() | 获取 URL输入流,读取资源 |
OutputStream | getOutputStream() | 获取 URL输出流,输出资源 |
int | getContentLength() | 获取 URL资源长度 |
int | getResponseCode() | 获取 URL响应状态码(如:404) |
# HttpURLConnection
Class HttpURLConnection
java.lang.Object java.net.URLConnection java.net.HttpURLConnection
HttpURLConnection支持 HTTP\HTTPS协议 ,可以将URLConnection强制转换HttpURLConnection
HttpURLConnection (URL url) 构造方法也可以实现通信连接
方法 (更多自行AIP)
返回 | 方法 | 说明 |
---|---|---|
void | setRequestMethod(String method) | 设置 URL请求方法(GET、POST、...。默认GET(必须大写)) |
int | getResponseCode() | 从HTTP响应消息获取状态代码 |
String | getRequestMethod() | 获取请求方法 |
# 编码
在开发中,有时是需要中文转码,保证传输不会出现乱码的情况,常用的有URLEncode
与 URLDecode
# URLEncoder类
将普通字符串转换成 application/x-www-from-urlencoded 字符串
1.字符a
-z
,A
-Z
,0
-9
,.
,-
,*
,_
都不会被编码
2.将空格转换为加号 (+)
3.将非文本内容转换成"%xy"的形式,xy是两位16进制的数值
4.在每个 name=value 对之间放置 & 符号
示例:
//字符串中的非英文字符的内容,会被转化成%XX%XX XX 为十六进制的数字
String urlString = URLEncoder.encode("你好" , "UTF-8");
System.out.println(urlString);
//输出:%E4%BD%A0%E5%A5%BD
# URLDecoder类
将 application/x-www-from-urlencoded 字符串转换成普通字符串。它与 URLEncoder类
是互为反向转换的过程(可以理解成 序列化与反序列化 的操作)
示例:
String keyWord = URLDecoder.decode("%E4%BD%A0%E5%A5%BD" , "UTF-8");
System.out.println(keyWord);
//输出:你好
# 代码示例
# 下载器
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;
/**
* @Author: 柏竹
* @Description: 一个简洁主义...
* @Date_Created_in: 2021-03-01 23:40
* @Modified_By:
* @Project: 下载器
*/
public class Demo {
public static void main(String[] args) throws Exception {
//https://qd.myapp.com/myapp/qqteam/pcqq/PCQQ2020.exe
System.out.println("下载器");
System.out.print("输入地址: ");
String address = new Scanner(System.in).nextLine();
URL url = new URL(address);
//获取 文件名称
String name = url.getFile();
/* name = /myapp/qqteam/pcqq/PCQQ2020.exe */
System.out.println("1 : "+name);
//最后一次出现的索引 ‘/’下标 + 1 开始
name = name.substring(name.lastIndexOf("/")+1);
/* name = PCQQ2020.exe */
System.out.println("2 : "+name);
//进行url连接
URLConnection conn = url.openConnection();
//连接url对象的总长度(字节数
long length = conn.getContentLengthLong();
// 获取 输入流 的资源
InputStream is = conn.getInputStream();
//下载 目的 的位置
File file = new File("D:\\IDM\\"+name);
FileOutputStream fos = new FileOutputStream(file);
//以下是执行下载
int len = -1;
// 每次对两字节
byte[] bytes = new byte[1024 * 1024];
int sum = 0;
while(true){
len = is.read(bytes);
if(len == -1){
break;
}
fos.write(bytes , 0 , len);
sum += len;
//通过文件 进度长 与 总长 的百分比进行算出下载进度
System.out.println("正在下载:"+sum/(length/100)+"%");
}
System.out.println("下载成功!!!");
is.close();
fos.close();
}
}
# 捕捉网页
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
/**
* @Author: 柏竹
* @Description: 一个简洁主义...
* @Date_Created_in: 2021-03-02 0:17
* @Modified_By:
* @Project:
*/
public class Demo {
public static void main(String[] args) throws Exception {
System.out.println("网站捕捉");
System.out.print("输入地址: ");
String address = new Scanner(System.in).nextLine();
URL url = new URL(address);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
File file = new File("D://IDM//"+"index.html");
//字节流 -> 缓存字符流
BufferedReader br = new BufferedReader(new InputStreamReader(is , StandardCharsets.UTF_8));
//文件字节流 -> 缓存字符流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
String line = null;
while (true){
line = br.readLine();
if (line == null){
break;
}
bw.write(line);
bw.newLine();
bw.flush();
}
System.out.println("网站捕捉完成!");
br.close();
bw.close();
}
}