柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

    • Java认识
    • 面向对象概述
    • Java API
    • Java三大特性
    • Java类的高级特性
    • Java异常
    • Swing程序设计
    • Java集合类
    • Java I/O
    • Java反射
    • 枚举
    • 泛型
    • Java线程
    • Java网络通信
    • Java事件
    • AWT绘图
    • Java网页访问
      • URL
      • 类
        • URL
        • URLConnection
        • HttpURLConnection
      • 编码
        • URLEncoder类
        • URLDecoder类
      • 代码示例
        • 下载器
        • 捕捉网页
    • XML&JSON
    • Java注解
  • JavaWeb

  • 拓展技术

  • 框架技术

  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

  • SpringBoot

  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • Java基础
柏竹
2020-02-18
目录

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();
    }
}
#Java
上次更新: 2023/03/12, 00:43:49

← AWT绘图 XML&JSON→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式