欢迎光临
我们一直在努力

用Mitmproxy搭建个人数据抓取代理服务器

在网络爬虫和数据采集领域,传统的 HTTP 请求库(如 requests、aiohttp)往往面临着复杂的反爬机制挑战:动态加载内容、JS 加密、Cookie 验证、API 签名等。而 Mitmproxy 作为一款强大的中间人代理工具,能够直接拦截和修改客户端与服务器之间的所有 HTTP/HTTPS 流量,为数据抓取提供了一种全新的思路和解决方案。

本文将带你从零开始,一步步搭建属于自己的 Mitmproxy 数据抓取代理服务器,从基础安装配置到高级 Python 脚本自动化,全面掌握这一 "网络中间人" 利器。

一、Mitmproxy 简介

Mitmproxy 是一个开源的、交互式的 HTTPS 代理工具,由 Python 编写而成。它不仅可以像 Fiddler、Charles 那样查看和分析网络流量,更重要的是它提供了强大的脚本扩展能力,让你能够用 Python 代码全自动地处理、过滤和存储网络数据。

1.1 三大核心组件

Mitmproxy 安装后会提供三个独立的命令行工具:

  • mitmproxy:基于终端的交互式界面,支持实时查看、过滤和修改流量(Windows 系统不支持)
  • mitmdump:命令行版本的 mitmproxy,适合后台运行和脚本自动化
  • mitmweb:基于 Web 的图形界面,操作直观,强烈推荐新手使用

1.2 Mitmproxy 的优势

  • 跨平台:完美支持 Windows、macOS 和 Linux 系统
  • HTTPS 支持:能够完整解密和查看 HTTPS 流量
  • 脚本化:通过 Python 钩子函数实现全自动流量处理
  • 可扩展:丰富的插件生态和 API 接口
  • 免费开源:完全免费且代码开源,无功能限制

二、环境准备与安装

2.1 系统要求

  • Python 版本:3.12 及以上(Mitmproxy 12.x 要求)
  • 操作系统:Windows 10+/macOS 10.15+/Linux
  • 网络环境:确保电脑和目标设备在同一局域网内

2.2 安装方法

方法一:官方安装包(推荐)

前往Mitmproxy 官方网站下载对应系统的安装包,直接运行安装即可。安装完成后,三个工具会自动添加到系统 PATH 中。

方法二:使用包管理器

macOS(Homebrew):

bash

运行

brew install –cask mitmproxy

Linux:

bash

运行

# Ubuntu/Debian
sudo apt install mitmproxy

# Arch Linux
sudo pacman -S mitmproxy

方法三:通过 Python pip 安装

bash

运行

# 先确保pip是最新版本
pip install –upgrade pip

# 安装mitmproxy
pip install mitmproxy

2.3 验证安装

打开终端或命令提示符,输入以下命令验证安装是否成功:

bash

运行

mitmdump –version

如果看到类似以下输出,说明安装成功:

plaintext

Mitmproxy: 12.0.0
Python: 3.12.3
OpenSSL: OpenSSL 3.2.1 30 Jan 2024
Platform: Windows-10-10.0.22631-SP0

三、基础代理配置

3.1 启动代理服务器

最简单的启动方式是直接运行 mitmweb(推荐新手使用):

bash

运行

mitmweb

启动成功后,终端会显示类似信息:

plaintext

Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8080

  • 代理服务器默认监听端口:8080
  • Web 管理界面地址:http://127.0.0.1:8081

如果你想指定其他端口,可以使用-p参数:

bash

运行

mitmweb -p 8888

3.2 配置客户端代理

要让设备的流量经过 Mitmproxy,需要在客户端设备上配置代理服务器。

电脑端配置

Windows 系统:

  • 打开 "设置" → "网络和 Internet" → "代理"
  • 开启 "使用代理服务器"
  • 地址:输入运行 Mitmproxy 的电脑的局域网 IP 地址
  • 端口:8080(或你指定的端口)
  • 点击 "保存"
  • macOS 系统:

  • 打开 "系统设置" → "网络"
  • 选择当前连接的 Wi-Fi,点击 "详细信息"
  • 切换到 "代理" 选项卡
  • 勾选 "网页代理 (HTTP)" 和 "安全网页代理 (HTTPS)"
  • 输入服务器地址和端口 8080
  • 点击 "好"
  • 手机端配置

    Android 系统:

  • 打开 "设置" → "WLAN"
  • 长按当前连接的 Wi-Fi 名称,选择 "修改网络"
  • 勾选 "显示高级选项"
  • 代理设置:选择 "手动"
  • 服务器主机名:输入电脑的局域网 IP
  • 服务器端口:8080
  • 点击 "保存"
  • iOS 系统:

  • 打开 "设置" → "无线局域网"
  • 点击当前连接的 Wi-Fi 右侧的 "i" 图标
  • 滚动到 "HTTP 代理" 部分,选择 "手动"
  • 服务器:输入电脑的局域网 IP
  • 端口:8080
  • 点击 "存储"
  • 四、HTTPS 证书配置(关键步骤)

    这是整个配置过程中最关键的一步。现代互联网几乎全部使用 HTTPS 加密传输,如果不安装 Mitmproxy 的 CA 证书,你将只能看到加密的乱码数据,无法解密和查看 HTTPS 请求的具体内容。

    4.1 证书生成

    首次运行 Mitmproxy 时,它会自动在用户目录下生成一个.mitmproxy文件夹,里面包含了所有需要的证书文件:

    • mitmproxy-ca-cert.pem:适用于 Linux、macOS 和大多数移动设备
    • mitmproxy-ca.p12:适用于 Windows 系统
    • mitmproxy-ca-cert.cer:适用于部分 Android 设备

    4.2 电脑端证书安装

    Windows 系统:

  • 确保 Mitmproxy 正在运行
  • 打开浏览器访问:http://mitm.it/
  • 点击 "Windows" 图标下载证书
  • 双击下载的mitmproxy-ca-cert.p12文件
  • 存储位置选择 "当前用户",点击 "下一步"
  • 密码留空,直接点击 "下一步"
  • 选择 "将所有的证书都放入下列存储",点击 "浏览"
  • 选择 "受信任的根证书颁发机构",点击 "确定"
  • 点击 "下一步" → "完成"
  • macOS 系统:

  • 访问http://mitm.it/下载 macOS 证书
  • 双击下载的mitmproxy-ca-cert.pem文件
  • 在钥匙串访问中找到 "mitmproxy" 证书
  • 双击证书,展开 "信任" 部分
  • 将 "使用此证书时" 改为 "始终信任"
  • 关闭窗口,输入系统密码确认更改
  • 4.3 手机端证书安装

    Android 系统:

  • 确保手机已经配置好代理
  • 打开手机浏览器访问:http://mitm.it/
  • 点击 "Android" 图标下载证书
  • 下载完成后,系统会提示安装证书
  • 证书用途选择 "VPN 和应用"
  • 输入证书名称(如 "mitmproxy"),点击 "确定"
  • iOS 系统:

  • 确保手机已经配置好代理
  • 打开 Safari 浏览器访问:http://mitm.it/
  • 点击 "iOS" 图标下载证书描述文件
  • 系统会提示 "已下载描述文件",点击 "关闭"
  • 打开 "设置" → "通用" → "VPN 与设备管理"
  • 在 "已下载的描述文件" 下点击 "mitmproxy"
  • 点击右上角的 "安装",输入锁屏密码
  • 再次点击 "安装" → "安装"
  • 关键步骤:打开 "设置" → "通用" → "关于本机" → "证书信任设置"
  • 开启 "mitmproxy" 证书的完全信任开关
  • 点击 "继续" 确认
  • 五、基础使用入门

    5.1 mitmweb 界面介绍

    打开浏览器访问http://127.0.0.1:8081/,你会看到 mitmweb 的主界面:

    • 左侧列表:显示所有捕获的 HTTP/HTTPS 请求
    • 右侧详情:分为 Request 和 Response 两个标签页
      • Request:显示请求方法、URL、请求头、请求体等信息
      • Response:显示响应状态码、响应头、响应体等信息
    • 顶部工具栏:提供搜索、过滤、清空、保存等功能

    5.2 过滤流量

    mitmweb 支持强大的过滤语法,可以快速找到你需要的请求:

    • 按域名过滤:~d example.com
    • 按请求方法过滤:~m POST
    • 按响应状态码过滤:~s 200
    • 按 URL 关键词过滤:~u api
    • 组合过滤:~d example.com ~m POST ~u api

    5.3 保存和导出数据

    你可以将捕获的流量保存为文件,以便后续分析:

  • 选中要保存的请求
  • 点击右上角的 "Export" 按钮
  • 选择导出格式(HAR、curl 命令、Python 代码等)
  • 保存到本地文件
  • 六、高级用法:Python 脚本自动化数据抓取

    这是 Mitmproxy 最强大的功能。通过编写 Python 脚本,你可以实现全自动的数据抓取、过滤、清洗和存储,完全摆脱手动操作的繁琐。

    6.1 脚本基础

    Mitmproxy 脚本基于事件钩子机制工作。你只需要定义特定的函数,当对应的事件发生时,Mitmproxy 会自动调用这些函数。

    最常用的两个事件钩子:

    • request(flow):在客户端请求到达 Mitmproxy 后,转发给服务器之前触发
    • response(flow):在服务器响应到达 Mitmproxy 后,返回给客户端之前触发

    6.2 示例 1:简单的数据抓取脚本

    这个脚本会自动捕获所有包含 "api/articles" 的请求,并将文章数据保存到 JSON 文件中:

    python

    运行

    # save as article_spider.py
    import json
    from mitmproxy import http

    # 存储捕获的数据
    captured_articles = []

    def response(flow: http.HTTPFlow):
    """处理服务器响应"""
    # 只处理目标API请求
    if "api/articles" in flow.request.url and flow.response.status_code == 200:
    try:
    # 解析JSON响应
    response_data = json.loads(flow.response.text)

    # 提取需要的字段
    articles = response_data.get("data", [])
    for article in articles:
    article_info = {
    "id": article.get("id"),
    "title": article.get("title"),
    "author": article.get("author", {}).get("name"),
    "views": article.get("views"),
    "publish_time": article.get("created_at")
    }
    captured_articles.append(article_info)

    print(f"✅ 成功捕获 {len(articles)} 条文章数据,总计 {len(captured_articles)} 条")

    # 实时保存到文件
    with open("articles.json", "w", encoding="utf-8") as f:
    json.dump(captured_articles, f, ensure_ascii=False, indent=2)

    except json.JSONDecodeError:
    print(f"❌ JSON解析失败: {flow.request.url}")
    except Exception as e:
    print(f"❌ 处理请求出错: {e}")

    运行脚本:

    bash

    运行

    mitmdump -s article_spider.py

    6.3 示例 2:修改请求参数突破接口限制

    很多 App 和网站的 API 会限制单页返回的数据量,通过 Mitmproxy 可以轻松修改请求参数:

    python

    运行

    # save as modify_params.py
    from mitmproxy import http

    def request(flow: http.HTTPFlow):
    """修改请求参数"""
    if "api/list" in flow.request.url:
    # 将单页返回条数从10改为100
    flow.request.query["page_size"] = "100"
    # 修改页码
    flow.request.query["page"] = "1"
    print(f"✅ 修改请求参数: {flow.request.url}")

    6.4 示例 3:自动保存图片

    这个脚本会自动将所有捕获的图片保存到本地文件夹:

    python

    运行

    # save as save_images.py
    import os
    from mitmproxy import http

    # 创建保存图片的文件夹
    os.makedirs("captured_images", exist_ok=True)

    def response(flow: http.HTTPFlow):
    """保存图片响应"""
    content_type = flow.response.headers.get("content-type", "")

    # 只处理图片类型
    if content_type.startswith("image/"):
    # 获取文件扩展名
    ext = content_type.split("/")[-1]
    if ext == "jpeg":
    ext = "jpg"

    # 生成文件名
    filename = f"{flow.request.host}_{flow.request.path.split('/')[-1]}.{ext}"
    filepath = os.path.join("captured_images", filename)

    # 保存图片
    with open(filepath, "wb") as f:
    f.write(flow.response.content)

    print(f"✅ 保存图片: {filename}")

    七、常见问题排查

    7.1 HTTPS 抓包失败

    症状:浏览器显示 "您的连接不是私密连接",App 无法联网,mitmproxy 中看到 SSL 错误。

    解决方案:

  • 确认证书已正确安装并受信任
  • iOS 用户务必检查 "证书信任设置" 是否开启
  • Android 7 + 系统中,用户证书默认不被应用信任,需要将证书安装为系统证书(需要 root 权限)
  • 清除浏览器缓存和 HSTS 记录
  • 7.2 代理配置后无流量

    症状:mitmproxy 界面中没有显示任何请求。

    解决方案:

  • 确认客户端和服务器在同一局域网内
  • 检查电脑防火墙是否阻止了 8080 端口
  • 确认代理地址和端口配置正确
  • 尝试重启 Mitmproxy 和客户端设备
  • 7.3 部分 App 无法抓包

    症状:大多数 App 可以正常抓包,但某些特定 App 无法联网或看不到请求。

    原因:这些 App 启用了 ** 证书绑定(Certificate Pinning)** 技术,它们会直接校验服务器证书的指纹,而不信任系统安装的 CA 证书。

    解决方案:

  • 对于 Android 设备,可以使用 Frida、Xposed 等工具绕过证书绑定
  • 对于 iOS 设备,可以使用 SSL Kill Switch 2 等插件
  • 注意:绕过证书绑定可能违反应用的服务条款,请谨慎使用
  • 八、安全注意事项

  • 合法使用:仅对你拥有或有权限测试的网站和应用进行抓包,未经授权的抓包行为可能违反法律法规
  • 证书安全:不要将你的 Mitmproxy CA 证书分享给他人,否则可能导致中间人攻击
  • 数据安全:抓取到的数据可能包含敏感信息(如密码、Token),请妥善保管
  • 关闭代理:使用完毕后及时关闭客户端代理,避免影响正常上网
  • 九、总结

    Mitmproxy 作为一款强大的中间人代理工具,为数据抓取提供了一种高效、灵活的解决方案。它不仅能够轻松绕过大多数前端反爬机制,还能通过 Python 脚本实现全自动的数据处理流程。

    通过本文的学习,你应该已经掌握了:

    • Mitmproxy 的安装和基础配置
    • HTTPS 证书的安装和信任设置
    • mitmweb 界面的基本使用
    • Python 脚本自动化数据抓取的方法
    • 常见问题的排查和解决

    当然,Mitmproxy 的功能远不止于此。你还可以探索更多高级用法,如请求重定向、响应修改、Mock 测试、透明代理等。希望这篇文章能帮助你开启 Mitmproxy 数据抓取的大门,让你的爬虫工作更加高效和轻松。

    赞(0)
    未经允许不得转载:171主机测评 » 用Mitmproxy搭建个人数据抓取代理服务器
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址