网站怎么做微博认证,网络舆情监测与研判,销售公司简介模板,在哪个网站做民营企业申报前言
在前面的文章中#xff0c;有几篇是介绍mitmproxy 的。 这个mitmproxy 的确是个捕获数据的好工具#xff0c;但在运行时候需要在命令行启动#xff0c;这是很令人苦恼的。
之前也尝试过脱离命令行去启动mitmproxy#xff0c;在Python中启动mitmproxy#xff0c;脱离…
前言
在前面的文章中有几篇是介绍mitmproxy 的。 这个mitmproxy 的确是个捕获数据的好工具但在运行时候需要在命令行启动这是很令人苦恼的。
之前也尝试过脱离命令行去启动mitmproxy在Python中启动mitmproxy脱离命令行启动mitmproxy监听 但它是借助Python 中的 os 和 subprocess模块去执行Windows系统的cmd命令 总觉得这不是个好方法遂有此文。
在这篇文章中我将介绍如何在PyCharm中直接启动mitmproxy让你可以更加方便地使用这个强大的工具。
知识点
模块作用mitmproxy免费和开源的交互式HTTPS代理atexit程序在退出时的处理器winprox通过Python模块函数和命令行编程来实现修改系统代理
如何在PyCharm中直接启动mitmproxy
通过将命令行参数以逗号分隔依次填写到mitmdump([]) 里面可以在PyCharm中直接启动mitmproxy。
如何自动启动和关闭系统代理
通过使用winproxy库的ProxySetting类可以方便地在Windows系统中启动和关闭系统代理。
如何使用atexit模块注册程序退出时的处理函数
通过atexit.register()函数可以在程序退出时自动执行特定的清理操作如关闭系统代理。
如何编写mitmproxy的数据捕获脚本
文章中提供了一个具体的脚本示例展示了如何捕获和处理特定URL的HTTP响应。
实现
常规情况
现在项目只有一个script.py文件它的内容为mitmproxy数据捕获的脚本。 代码来自于这篇文章爬虫不是mitmproxy帮你采集微信公众号留言
script.py
from mitmproxy import http# 定义一个函数用于处理每一个响应
def response(flow: http.HTTPFlow) - None:# 判断响应的URL是否是公众号留言的URLif https://mp.weixin.qq.com/mp/appmsg_comment?actiongetcommentscene0 in flow.request.url:# 获取响应的数据包response flow.response# 打印出响应的状态码和内容print(fStatus: {response.status_code})print(fContent: {response.content})print(parse(dataresponse.text))def parse(data: str):解析留言流量包_data defaultdict(list)try:for item in json.loads(data)[elected_comment]:_data[nick_name].append(item[nick_name])_data[content].append(item[content])_data[like_num].append(item[like_num])_data[province_name].append(item[ip_wording][province_name])except (KeyError, json.decoder.JSONDecodeError):...finally:return _dataaddons [response]
在这份代码中一般的运行步骤是去命令行输入
-p 9527 -q 这些参数可选~
mitmdump -s demo.py -p 9527 -q这样一来一回就不够便捷了。 在PyCharm运行
在这里只需要将命令行参数以逗号分隔依次填写到mitmdump([]) 里面即可。
就是这么简单
from mitmproxy import http
from mitmproxy.tools.main import mitmdumpif __name__ __main__:# 运行 Mitmproxy并传递命令行参数mitmdump([-s, __file__, -p, 9527, -q])这里需要注意一下的是作为mitmproxy脚本如果写的是类则需要添加一行代码
有class
顺序也很重要必须要在if __name__ __main__:之前。
from mitmproxy.tools.main import mitmdumpclass ListenComment:def __init__(self):...def response(self, flow: mitmproxy.http.HTTPFlow):...addons [ListenComment()]if __name__ __main__:mitmdump([-s, __file__, -q])实际案例
这里结合这一篇文章【Python】Windows跟随程序启动和关闭系统代理
完成一个自动启动与关闭系统代理且在PyCharm 执行的 mitmproxy 程序极简到家了
# -*- coding: utf-8 -*-
# Name: mitm.py
# Author: 小菜
# Date: 2023/11/03 11:30
# Description:import atexit
import json
from collections import defaultdictimport mitmproxy.http
from mitmproxy.tools.main import mitmdump
from winproxy import ProxySettingps ProxySetting()def set_proxy():设置系统代理ps.enable Trueps.server 127.0.0.1:9527ps.registry_write()print(代理已经打开!)def close_proxy():关闭系统代理ps.enable Falseps.registry_write()print(代理已经关闭!)class ListenComment:def __init__(self):self.map {liveObjectId: str(),jsons: dict()}self.set set()# 定义一个函数用于处理每一个响应def response(self, flow: mitmproxy.http.HTTPFlow) - None:# 判断响应的URL是否是公众号留言的URLif https://mp.weixin.qq.com/mp/appmsg_comment?actiongetcommentscene0 in flow.request.url:# 获取响应的数据包response flow.response# 打印出响应的状态码和内容print(fStatus: {response.status_code})print(fContent: {response.content})print(self.parse(dataresponse.text))def parse(self, data: str):解析留言流量包_data defaultdict(list)try:for item in json.loads(data)[elected_comment]:_data[nick_name].append(item[nick_name])_data[content].append(item[content])_data[like_num].append(item[like_num])_data[province_name].append(item[ip_wording][province_name])except (KeyError, json.decoder.JSONDecodeError):...finally:return _dataaddons [ListenComment()]if __name__ __main__:# 打开代理set_proxy()# 注册清理函数atexit.register(close_proxy)mitmdump([-s, __file__, -p 9527, -q])
运行效果如下图所示 总结
在本文中我详细介绍了如何在PyCharm中直接启动mitmproxy以及如何自动启动和关闭系统代理无需再通过命令行。 这种方法不仅避免了频繁在命令行中输入命令的麻烦而且通过自动管理系统代理使得整个过程更加便捷和高效。 我还提供了具体的代码示例以帮助读者朋友们更好地理解和实践。 希望这篇文章能对大家使用mitmproxy进行数据捕获的工作带来帮助提高工作效率。
后话
本次分享到此结束 see you~