![]() |
||
---|---|---|
.env | ||
README.md | ||
main.py | ||
requirements.txt |
README.md
反向代理服务器
这是一个使用 Python 和 Flask 构建的简单反向代理服务器。它可以将所有请求代理到在 .env
文件中配置的目标 URL,并动态重写响应内容(HTML, CSS, JS)中的链接,以确保所有资源都通过代理加载。
主要功能
- 反向代理: 将所有传入的请求(包括 GET, POST 等方法和路径)转发到目标服务器。
- URL 重写: 自动重写 HTML (
href
,src
,action
)、CSS (url()
,@import
) 和 JavaScript 中的 URL,使其指向代理服务器而不是原始目标。 - 流式响应: 对于非文本内容(如图片、视频),服务器以流式方式传输,以提高性能和减少内存使用。
- CORS 支持: 自动添加 CORS (跨域资源共享) 头,允许跨域请求。
- 配置简单: 只需在
.env
文件中设置目标 URL 即可。
技术栈
- Python
- Flask: Web 框架
- Requests: 用于发送 HTTP 请求
- BeautifulSoup4 & lxml: 用于解析和修改 HTML 内容
- Waitress: 用于生产环境的 WSGI 服务器
- python-dotenv: 用于管理环境变量
安装与配置
-
克隆仓库
git clone <your-repo-url> cd <your-repo-directory>
-
安装依赖 建议在虚拟环境中使用
pip
安装项目所需的依赖项:pip install -r requirements.txt
-
创建配置文件 在项目根目录下创建一个名为
.env
的文件,并添加以下内容:TARGET_URL=https://example.com
将
https://example.com
替换为您想要代理的目标网站 URL。
如何运行
完成安装和配置后,运行以下命令启动服务器:
python main.py
服务器将在 http://0.0.0.0:8080
上启动。现在,您可以通过访问 http://localhost:8080
来浏览代理的网站。
工作原理
该服务器拦截所有传入的 HTTP 请求。它会构建一个指向 TARGET_URL
的新请求,并将原始请求的路径、查询参数、请求头和数据包体一并转发。
当从目标服务器收到响应后:
- 如果响应是文本类型(如
text/html
,text/css
,application/javascript
),服务器会先读取全部内容,使用BeautifulSoup
和正则表达式查找并替换所有指向原始域名的 URL,然后将修改后的内容返回给客户端。 - 如果响应是二进制内容(如图片),服务器会直接将内容以数据流的形式转发给客户端,以避免不必要的内存消耗。
- 它还会处理 HTTP 重定向,并重写
Location
头,以确保用户停留在代理服务器上。