第一部分:HTTP协议基础
理解HTTP协议是网络编程的基石,掌握请求-响应模型、方法、状态码和报文结构
学习目标
掌握HTTP协议基本概念,理解请求/响应结构,熟悉常用HTTP方法和状态码
HTTP请求-响应模型
HTTP协议基于客户端-服务器模型,采用请求-响应工作方式:
客户端发送请求
浏览器或Java程序发送HTTP请求
服务器处理请求
Web服务器接收并处理请求
服务器返回响应
服务器将处理结果封装成HTTP响应
客户端处理响应
客户端接收并处理响应内容
HTTP请求方法
HTTP定义了一组请求方法,表示对资源的操作:
- GET 获取资源(最常用)
- POST 提交数据创建资源
- PUT 更新已有资源
- DELETE 删除资源
- HEAD 获取响应头信息
- OPTIONS 查询服务器支持的方法
HTTP状态码
状态码表示请求的处理结果:
- 1xx 信息响应(继续处理)
- 2xx 成功响应(200 OK)
- 3xx 重定向(301 Moved Permanently)
- 4xx 客户端错误(404 Not Found)
- 5xx 服务器错误(500 Internal Server Error)
HTTP头部字段
HTTP头部传递请求和响应的元数据:
头部字段 | 说明 | 示例 |
---|---|---|
Host | 请求的目标主机 | Host: www.example.com |
User-Agent | 客户端信息 | User-Agent: Java/17 |
Content-Type | 请求/响应体的MIME类型 | Content-Type: application/json |
Content-Length | 请求/响应体的长度 | Content-Length: 348 |
Location | 重定向目标URL | Location: /new-page |
第二部分:Java URL类详解
Java的URL类提供了统一资源定位符的高级抽象,便于访问网络资源
学习目标
掌握URL类的使用,能够创建URL对象,解析URL各部分,使用URLConnection访问资源
URL结构解析
URL(Uniform Resource Locator)统一资源定位符的标准格式:
URL部分 | 说明 | Java获取方法 |
---|---|---|
协议(Scheme) | 访问资源使用的协议 (http, https, ftp等) | url.getProtocol() |
主机名(Host) | 资源所在的主机域名或IP地址 | url.getHost() |
端口(Port) | 访问端口(默认端口可省略) | url.getPort() |
路径(Path) | 资源在服务器上的路径 | url.getPath() |
查询参数(Query) | 传递给资源的参数(键值对) | url.getQuery() |
锚点(Fragment) | 页面内的锚点位置(不会发送到服务器) | url.getRef() |
创建URL对象
Java中创建URL对象的几种方式:
处理MalformedURLException
创建URL对象时可能抛出的异常:
常见错误原因:
- 协议名称拼写错误
- 缺少冒号斜杠(://)
- 无效的端口号
- 包含非法字符
第三部分:URL实战编程
使用URL和URLConnection类访问网络资源
学习目标
掌握使用URLConnection读取网络资源,处理响应头,处理超时和异常
使用URLConnection读取内容
基本步骤:创建URL对象 -> 打开连接 -> 设置参数 -> 读取数据
读取响应头信息
获取并遍历响应头信息:
处理重定向
自动处理HTTP重定向:
注意:
1. 默认情况下HttpURLConnection会自动处理重定向
2. 对于POST请求的重定向需要特殊处理
3. 无限重定向可能导致程序陷入循环
第四部分:常见错误与调试
解决URL编程中的常见问题和调试技巧
学习目标
识别并解决常见网络编程错误,掌握调试技巧
常见错误与解决方案
错误类型 | 原因 | 解决方案 |
---|---|---|
UnknownHostException | 域名无法解析 | 检查域名拼写,网络连接,DNS设置 |
ConnectException | 无法建立连接 | 检查目标服务是否运行,防火墙设置,端口是否正确 |
SocketTimeoutException | 连接或读取超时 | 增加超时时间,检查网络状况,优化服务响应 |
FileNotFoundException | 资源不存在(HTTP 404) | 检查URL路径是否正确,资源是否被移除 |
SSLHandshakeException | HTTPS证书问题 | 更新证书,添加信任,或使用HTTP |
调试技巧
- 启用详细日志: 使用System.setProperty("javax.net.debug", "all")
- 检查网络连接: 使用ping和telnet测试连通性
- 分析HTTP流量: 使用Wireshark或Fiddler抓包分析
- 打印完整URL: System.out.println(url.toExternalForm())
-
使用代理: 设置代理查看请求详情
// 设置HTTP代理 System.setProperty("http.proxyHost", "proxy.example.com"); System.setProperty("http.proxyPort", "8080");
安全注意事项
重要安全提示
- 避免在URL中传递敏感数据,使用POST请求替代
- 验证重定向URL,防止开放重定向漏洞
- 处理HTTPS连接时,验证服务器证书的有效性
- 限制从不受信任来源获取的URL内容
- 对用户输入的URL进行严格验证和清理
第五部分:总结与练习
巩固知识,通过实践提升技能
学习目标
通过实际练习巩固HTTP协议和URL类的知识
知识总结
- HTTP是基于TCP的应用层协议,使用请求-响应模型
- URL类提供了统一资源定位符的高级抽象
- URLConnection是访问网络资源的核心类
- 必须正确处理异常和资源释放
- 掌握状态码和重定向处理至关重要
- 安全考虑是网络编程的重要部分
动手练习
完成以下练习巩固所学知识:
练习1:URL解析器
编写一个程序,接受URL字符串作为输入,解析并输出:
- 协议
- 主机名
- 端口(如未指定则输出默认端口)
- 路径
- 查询参数
- 锚点
练习2:简单HTTP客户端
创建一个HTTP客户端,能够:
- 发送GET请求获取内容
- 显示响应状态码和头信息
- 将响应内容保存到文件
- 支持设置超时时间
- 处理重定向
练习3:API数据获取
使用JSONPlaceholder API完成以下任务:
- 获取用户ID为1的所有帖子
- 获取帖子ID为1的所有评论
- 创建一篇新帖子并输出服务器响应
- 更新现有帖子的标题
- 删除一篇帖子并检查响应状态码
API地址:https://jsonplaceholder.typicode.com/