当前位置: 首页 > news >正文

python 爬虫工具 mitmproxy, 几问几答,记录一下

1. 起因, 目的:

  • 某次爬虫失败: 几个加密参数,费劲而且不划算。
  • 决定再次研究 爬虫工具 mitmproxy

2. 过程:

写个文章。目的是记录今天的探索过程。所以请力求精简,而且直达核心, 要求语言清晰易懂。把核心问题, 即与 mitmproxy 相关的,写在前面其他的,额外的知识点,可以写在后面,单独分开。

问题:mitmproxy 能做什么?

回答:
mitmproxy 是一个强大的中间人代理工具,能够拦截、修改、记录和分析 HTTP、HTTPS 流量。通过它,你可以:

  • 拦截和修改请求与响应:如修改请求体、请求头、响应内容等。
  • 自动化操作:通过脚本和插件,可以编写自定义功能来自动处理流量。
  • 流量分析:实时查看和分析 HTTP 请求,了解应用行为。
  • SSL/TLS 握手解密:支持中间人攻击模型,解密 HTTPS 流量以进行分析。

mitmproxy 支持 HTTP/1、HTTP/2 和 WebSocket,适合用于调试 Web 应用、测试 API、了解协议交互等。


问题:如何隐藏 mitmweb 控制台中的无用输出?

回答:
mitmweb 控制台默认会输出大量日志信息,若想隐藏这些信息,可以通过设置日志级别来过滤掉不需要的输出。使用命令行参数设置 console_eventlog_verbositywarnerror 可以减少输出的冗余内容:

mitmweb --set console_eventlog_verbosity=warn

这会隐藏信息级别以下的日志(例如连接日志等),只显示警告和错误信息。


问题:如何查看 mitmproxy 中的 request 和 response 内容?

回答:
在 mitmproxy 中,flow 对象代表了请求和响应的完整信息。可以通过脚本访问和修改 flow.requestflow.response 来处理它们:

def request(flow):# 查看请求内容print(flow.request.url)print(flow.request.headers)def response(flow):# 查看响应内容print(flow.response.content)

这可以让你捕获请求 URL、请求头、响应体等内容进行分析。


问题:如何在 mitmproxy 中使用过滤器?

回答:
mitmproxy 提供了过滤器功能,可以根据 URL、请求方法、响应状态码等条件来筛选流量。常用的过滤器语法包括:

  • ~u:匹配 URL
  • ~m:匹配请求方法(GET、POST 等)
  • ~s:匹配响应状态码
  • ~q:匹配请求体或参数
  • ~b:匹配请求或响应的 Body 内容

例如,筛选出所有 POST 请求:

~m POST

或者,筛选出 404 错误响应:

~s 404

这些过滤器可以帮助你快速定位到感兴趣的流量。


问题:mitmproxy 与 Clash 同时运行时会发生什么?

回答:
mitmproxy 默认使用 8080 端口,而 Clash 使用的是 7899 端口。如果两者同时启动,它们会争夺同一个网络端口,导致其中一个无法正常运行。

  • 解决方法: 确保只启动一个代理服务,或者将它们的端口进行调整,使其不发生冲突。

如果同时打开,当你发出请求时,流量会按照以下顺序走:

  1. 请求会首先被 Clash 代理转发。
  2. 然后,mitmproxy 会作为中间人进一步处理(如果它被配置为默认代理)。

这样流量会经过多个代理进行处理,可能会引发一些不必要的延迟或冲突。


额外的知识点


Innsbruck 和 Interlaken

  • Innsbruck 是奥地利的一个城市,位于阿尔卑斯山,是滑雪胜地。
  • Interlaken 是瑞士的一个旅游小镇,也以滑雪和登山闻名。

这两个城市不一样,虽然都位于阿尔卑斯山区。


Anatomy of an Addon

在 mitmproxy 中,插件(Addon)是通过 Python 脚本来实现的,通常涉及两个主要函数:request(flow)response(flow)flow 是请求和响应的容器,插件通过它来操作和处理流量。Anatomy of an Addon 就是指了解插件的构成和如何编写自定义功能。


Windows Activity 请求

你发现的请求是 Windows 系统的 Activity Feed 功能,它会将用户的活动记录(如打开的应用、浏览的网页)上传到微软服务器。这是微软的一个同步和增强体验的功能。如果你不希望上传这些数据,可以通过设置或组策略关闭该功能。


通过这些整理,希望你对 mitmproxy 有了更清晰的理解,并且能够在实际使用中更加得心应手。如果你有更多问题或需要进一步探讨,随时向我提问!


希望对大家有帮助。

相关文章:

  • Electron Fiddle使用笔记
  • React从基础入门到高级实战:React 实战项目 - 项目三:实时聊天应用
  • windows10搭建nfs服务器
  • 大数据学习(131)-Hive数据分析函数总结
  • 赋能大型语言模型与外部世界交互——函数调用的崛起
  • Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)
  • Axios请求超时重发机制
  • JS手写代码篇---手写函数柯里化
  • 【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
  • 浏览器工作原理01 [#]Chrome架构:仅仅打开了1个页面,为什么有4个进程
  • 汽车的安全性能测试:试验台铁地板的重要性
  • Unity3D仿星露谷物语开发60之定制角色其他部位
  • 【题解-洛谷】P3370 【模板】字符串哈希
  • Docker + Nginx + Logrotate 日志管理与轮换实践
  • YUM仓库编译出现`conflicting requests`问题解决方案
  • Linux系统安装Docker
  • Python 构建法律DeepSeek RAG
  • YOLO训练保持原有识别能力
  • Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级
  • 宝塔think PHP8 安装使用FFmpeg 视频上传
  • 网站前置审核申请报告/视频号排名优化帝搜软件
  • 做做网站需要多少钱/广告公司排名
  • 时间轴 网站模板/注册网站平台要多少钱
  • 网站制作需要多少费用/seo是什么意思怎么解决
  • 大连哪家公司做网站比较好/新开传奇网站
  • 河北邯郸信息港/青岛seo网站排名