Go to file
Doka 1250a6070a 1.0 2025-07-30 22:08:31 +08:00
.env 1.0 2025-07-30 22:08:31 +08:00
README.md 1.0 2025-07-30 22:08:31 +08:00
main.py 1.0 2025-07-30 22:08:31 +08:00
requirements.txt 1.0 2025-07-30 22:08:31 +08:00

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: 用于管理环境变量

安装与配置

  1. 克隆仓库

    git clone <your-repo-url>
    cd <your-repo-directory>
    
  2. 安装依赖 建议在虚拟环境中使用 pip 安装项目所需的依赖项:

    pip install -r requirements.txt
    
  3. 创建配置文件 在项目根目录下创建一个名为 .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 头,以确保用户停留在代理服务器上。