1 unstable release
Uses new Rust 2024
| new 0.1.0 | Mar 13, 2026 |
|---|
#9 in #https-proxy
28KB
420 lines
Rust HTTP/HTTPS 代理服务器
一个用Rust实现的简单HTTP/HTTPS代理服务器。
功能特性
- 支持HTTP/1.1代理
- 支持HTTPS代理(通过CONNECT隧道)
- 支持请求转发和响应返回
- 简单的TCP层代理实现
- 命令行参数配置
- 自动解析目标地址
- 支持HTTP和HTTPS协议自动检测
三种实现方式
项目包含三种代理实现:
- 主代理服务器 (
src/main.rs): 支持HTTP和HTTPS的完整代理实现 - 简单代理服务器 (
src/simple_proxy.rs): 更简单的TCP层代理实现 - HTTPS代理服务器 (
src/https_proxy.rs): 专注于HTTPS支持的代理实现
使用方法
1. 构建项目
cargo build --release
2. 启动主代理服务器(支持HTTP和HTTPS)
默认监听 127.0.0.1:8080:
cargo run --release
或指定监听地址:
cargo run --release -- --listen 0.0.0.0:8080
3. 启动简单代理服务器
cargo run --bin simple_proxy --release
4. 启动HTTPS代理服务器
cargo run --bin https_proxy --release
5. 启动高级HTTPS代理服务器
cargo run --bin https_proxy --release -- --https
6. 配置客户端使用代理
使用 curl 测试HTTP:
curl -x http://127.0.0.1:8080 http://httpbin.org/get
使用 curl 测试HTTPS:
curl -x http://127.0.0.1:8080 https://httpbin.org/get
使用环境变量:
# Linux/macOS
export http_proxy=http://127.0.0.1:8080
export https_proxy=http://127.0.0.1:8080
# Windows
set http_proxy=http://127.0.0.1:8080
set https_proxy=http://127.0.0.1:8080
然后使用curl测试:
# 测试HTTP
curl http://httpbin.org/get
# 测试HTTPS
curl https://httpbin.org/get
7. 运行测试脚本
Linux/macOS:
chmod +x test_proxy.sh
./test_proxy.sh
Windows:
test_proxy.bat
命令行参数
主代理服务器支持以下参数:
--listen <LISTEN> 代理服务器监听的地址 [默认值: 127.0.0.1:8080]
-h, --help 显示帮助信息
-V, --version 显示版本信息
项目结构
src/
main.rs 主代理服务器实现
simple_proxy.rs 简单代理服务器实现
examples/
test_client.rs 测试客户端示例
Cargo.toml 项目配置和依赖
README.md 项目说明
config.example.toml 配置文件示例
test_proxy.sh Linux/macOS测试脚本
test_proxy.bat Windows测试脚本
依赖库
tokio: 异步运行时clap: 命令行参数解析rustls: TLS加密库tokio-rustls: 异步TLS支持webpki: 证书验证webpki-roots: 根证书库
工作原理
HTTP代理工作原理:
- 代理服务器监听指定端口
- 收到客户端HTTP请求后,解析请求头和目标URL
- 建立到目标服务器的TCP连接
- 转发客户端请求到目标服务器
- 将目标服务器的响应返回给客户端
- 在客户端和目标服务器之间双向转发数据
HTTPS代理工作原理:
- 客户端发送CONNECT请求到代理服务器(如
CONNECT example.com:443 HTTP/1.1) - 代理服务器解析CONNECT请求中的目标地址
- 代理服务器建立到目标服务器的TCP连接
- 代理服务器返回
200 Connection Established响应给客户端 - 客户端开始TLS握手,与目标服务器建立加密连接
- 代理服务器在客户端和目标服务器之间透明转发加密数据
支持的请求类型
- HTTP请求: GET, POST, HEAD, 其他HTTP方法
- HTTPS请求: 通过CONNECT隧道建立加密连接
目标地址解析
代理服务器会自动从以下位置解析目标地址:
- HTTP请求的
Host头 - 请求行中的URL(如
GET http://example.com/path或GET https://example.com/path) - CONNECT请求中的目标地址(如
CONNECT example.com:443)
HTTPS支持说明
CONNECT隧道方法
这是标准的HTTPS代理工作方式:
- 客户端发送
CONNECT请求到代理 - 代理建立到目标服务器的TCP连接
- 代理返回成功响应
- 客户端与目标服务器直接进行TLS握手
- 代理透明转发加密数据
优点:
- 代理不需要处理TLS加密/解密
- 客户端和目标服务器的通信保持端到端加密
- 符合HTTP代理标准
注意事项:
- HTTPS代理使用CONNECT隧道,代理只看到加密数据
- 需要客户端支持HTTP代理协议
- 默认HTTPS端口是443
- 建议在测试环境中使用
- 生产环境需要添加更多安全性和性能优化
测试网站
可以使用以下网站测试代理功能:
Dependencies
~19–33MB
~473K SLoC