# https-proxy **Repository Path**: gentheaven/https-proxy ## Basic Information - **Project Name**: https-proxy - **Description**: windows本机 http/https代理 - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-26 - **Last Updated**: 2025-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # http/https 代理 ## 简介 运行平台: windows 10 开发工具:VS2019 社区版 开发语言:C 语言 最终的可执行程序:winproxy.exe 功能:http/https 代理服务器 # tinyproxy 借鉴的开源代码:tinyproxy 2024/5, V1.11.2 [tinyproxy/tinyproxy: tinyproxy - a light-weight HTTP/HTTPS proxy daemon for POSIX operating systems](https://github.com/tinyproxy/tinyproxy) tinyproxy 运行在 Linux 上; 我把它移植到 Windows 上。 ## 相同之处 都是 http/https 代理服务器 ## 不同之处 **1 - 程序所处位置不同** tinyproxy 可以放在本机,也可以放在一个独立的服务器上; winproxy.exe 只需要**运行在本机**。 所以, tinyproxy 源代码中 check_acl:权限检查 (ACL:Access ControL )的功能不需要。 **2 - 监听对象数量不同** tinyproxy 可以定义一个**监听列表**,监听这个列表的所有通讯; winproxy.exe **只监听一个地址**,例如:127.0.0.1:8080 (这个地址是本机代理服务器地址,在 Windows 设置里可以设定。实际项目中,用代码设定 windows 代理) 所以,tinyproxy 的主循环中,需要用 **select** 得到哪个 IP:PORT 被连接;因为它需要监听多个地址:端口。 而 winproxy.exe:只监听一个地址,所以无需用 select, 直接调用 **accept**,阻塞等待,直到有客户的连接请求。 **3 - 目的不同** tinyproxy 的核心是一个**代理服务器**,用于访问控制,流量记录等。 winproxy.exe 主要用来破解本机 https 加密,代理服务器是次要功能。 winproxy.exe 的开发分2步: 第一步:做一个简单的代理服务器 第二步:实现 **MITM 代理**,破解 https 流量。 ------ ## 使用 ------ ## 编译 VS2019 打开根目录下的项目文件:winproxy\winproxy.sln 编译成 x64 版本的可执行文件:winproxy.exe ## 软件架构 ------ # llhttp V9.3.0 2025/9/21 集成到项目中。 [Visual Studio 编译llhttp - 知乎](https://zhuanlan.zhihu.com/p/1952649178569225647) 集成方式:源代码 本来想编译为静态链接库集成。 因为改变了源代码,增加了一个成员变量,所以用源代码的方式集成。 # libuv 2025年4月发布的 V1.51.0 静态链接库形式。 代替 Select IO 模型。 替代后,CPU 占用率从 98% 下降到 1%以内。 # 相关文章 [tinyproxy简介 - 知乎](https://zhuanlan.zhihu.com/p/1954464404344115514) [世界最小http代理 - 知乎](https://zhuanlan.zhihu.com/p/1954823491091170978) [http代理优化 - 知乎](https://zhuanlan.zhihu.com/p/1956067994934444597) [libuv 使用指南 - 知乎](https://zhuanlan.zhihu.com/p/1956429531050117003) [libuv 详解:极致优化 - 知乎](https://zhuanlan.zhihu.com/p/1956651243259802498) ------ # 开发日志 2025/9/15 开始开发 2025/9/24:基本完成 http代理。 还需要写文档,优化代码。 2025/9/26:完成代码。 上传到码云。 一共1400行代码。 其中:c 代码3个,一共1100行;头文件1个,300行。 ```bash find . -name "*.c" -exec wc -l {} + 301 ./main.c 389 ./tools.c 410 ./winsock.c 1100 total find . -name "*.h" -exec wc -l {} + 298 ./proxy.h ``` ## 9/30 V1.4 版本之前,采用 select 模型,CPU 占用率 98%; V1.4 版本之后,采用 libuv (V1.51.0)模型,CPU 占用率 1% 以内。 对比 tinyproxy,不包含开源代码的行数。 libuv 编译为静态链接库。 改为 libuv 后代码量减小,因为有些代码 libuv 库实现了。 | 对比项目 | 总行数 | c代码 | 头文件 | 编译结果 | | ----------------- | ------ | ------ | ------ | -------- | | tinyproxy | 1万行 | 2000行 | 8000行 | 400KB | | winproxy - select | 1400行 | 1100行 | 300行 | 63KB | | winproxy - libuv | 1000行 | 800行 | 200行 | 137KB | ``` find . -name "*.c" -exec wc -l {} + 359 ./main.c 328 ./tools.c 150 ./winsock.c 837 total find . -name "*.h" -exec wc -l {} + 239 ./proxy.h ```