PyQt6+mitmproxy,实现抓取网络请求并打印到桌面的窗口中

你可以将你的PyQt6应用程序与mitmproxy结合使用,以便在GUI中显示拦截的HTTP请求和响应。以下是修改后的代码:

  1. 安装依赖项
    确保你已经安装了PyQt6mitmproxy

    pip install PyQt6 mitmproxy
    
  2. 编写Python代码

    创建一个Python文件,例如 hello_world_with_proxy.py,并在其中编写以下代码:

import sys
import asyncio
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QTextEdit
from PyQt6.QtCore import Qt, QTimer
from threading import Thread
from mitmproxy import http
from mitmproxy.tools.dump import DumpMaster
from mitmproxy.options import Options
from queue import Queue

class HelloWorldApp(QWidget):
def init(self):
super().init()

    self.initUI()def initUI(self):self.setWindowTitle('Hello World App')self.setGeometry(100, 100, 500, 400)layout = QVBoxLayout()self.text_edit = QTextEdit(self)self.text_edit.setReadOnly(True)self.button = QPushButton('Start Proxy', self)self.button.clicked.connect(self.start_proxy)layout.addWidget(self.text_edit)layout.addWidget(self.button)self.setLayout(layout)self.queue = Queue()def start_proxy(self):self.thread = Thread(target=self.run_proxy, daemon=True)self.thread.start()self.button.setEnabled(False)def run_proxy(self):asyncio.run(self.start_mitmproxy())async def start_mitmproxy(self):options = Options(listen_host='127.0.0.1', listen_port=7890)master = DumpMaster(options)master.addons.add(ProxyAddon(self.queue))await master.run()def update_text_edit(self):while not self.queue.empty():message = self.queue.get()self.text_edit.append(message)

class ProxyAddon:
def init(self, queue):
self.queue = queue

def request(self, flow: http.HTTPFlow) -> None:if "https://bizapi.csdn.net/community-personal/v1/get-work?username=sunyuhua_keyboard" in flow.request.pretty_url:message = f"请求URL: {flow.request.pretty_url}  请求内容: {flow.request.content}"self.queue.put(message)def response(self, flow: http.HTTPFlow) -> None:if "https://bizapi.csdn.net/community-personal/v1/get-work?username=sunyuhua_keyboard" in flow.request.pretty_url:message = f"响应内容: {flow.response.content}"self.queue.put(message)

def main():
app = QApplication(sys.argv)
ex = HelloWorldApp()
ex.show()

timer = QTimer()
timer.timeout.connect(ex.update_text_edit)
timer.start(100)  # 100毫秒检查一次队列sys.exit(app.exec())

if name == ‘main’:
main()


这个代码创建了一个PyQt6的GUI应用程序,包含一个文本编辑框和一个按钮。点击按钮将启动`mitmproxy`代理服务器,并监控指定的URL请求和响应。拦截到的信息将被打印到文本编辑框中。3. **运行程序**:在终端中运行这个Python脚本:
```bash
python hello_world_with_proxy.py

请确保你的浏览器或其他应用程序的代理设置指向127.0.0.1:8080,这样流量就会通过你的代理服务器进行拦截和处理。

这个代码应该能够在按钮点击后启动代理,并在拦截到指定URL的请求和响应时,在GUI中显示这些信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考中级:信息系统管理工程师备考资源

信息系统管理工程师备考资源 1 备考资源内容2 使用心得3 资源地址 1 备考资源内容 资源内容包含三部分:教程书籍pdf、备考笔记、历年真题 可以结合“软考通”APP进行练习备考,无偿分享。 2 使用心得 上面的资源很多,可以先从复习笔记开…

Kotlin作用域函数it和with的使用场景

在 Kotlin 中,apply、run、with 使用 this,而 let 和 also 使用 it,这背后的原因是为了提供灵活性和代码清晰度。不同的作用域函数有不同的设计目的,选择使用 this 或 it 是为了适应不同的使用场景。以下是详细解释: …

如何提高工业交换机的电源功耗?

工业交换机的电源功耗是指在工作状态下所消耗的能量。随着工业自动化技术的发展,工业交换机在生产和制造领域中扮演着至关重要的角色。它们通过连接各种设备和系统,实现信息的传输和处理,提高生产效率和质量。然而,工业交换机的大…

高质量3d建模素材网站推荐,建议收藏!

很多设计师、建模师想要制作出高质量的3D模型,除了扎实的技巧和丰富的经验外,还需要大量的高质量素材。那么到哪里去找高质量3d建模素材网站呢?本文将给大家推荐一些,建议收藏! 1、建e网:建e网是一个专注于为建筑、室内、景观设计…

郑州大学人工智能简答

第一章 1. 什么是人工智能? 人工智能又称机器智能,主要研究人工的方法和技术开发智能机器或智能系统,以模仿、延伸和扩展人的智能、生物智能、自然智能,实现机器的智能行为。 人工智能的定义分四类: (1&am…

ai语音智能电销机器人的运用有哪些,呼叫系统部署

现在智能电销机器人仍是很火,智能电销机器人的运用有哪些,到底有什么效果?智能电销机器人运用有哪些了,我们一起来看看 1、确保心情丰满。电销人员在作业中,会由于作业比较单调而导致心情烦躁,不能确保全天…

Java--乐观锁

乐观锁是一种并发控制机制,用于处理多个事务或线程对同一数据进行并发修改的问题。它假设多个事务或线程在操作数据时不会互相干扰,因此不在数据上加锁,而是在提交数据时检查数据是否被其他事务修改过。如果数据在提交前已经被其他事务修改&a…

政务网站(.gov)应选择什么样的SSL证书

政府网站作为公共服务的重要平台,承载着发布政策信息、提供在线服务、促进政民互动等功能,其数据安全性和网站可信度尤为重要。因此,选择合适的SSL证书对于政府网站而言,不仅是遵循网络安全法规的需要,也是提升公众信任…

【ai】trition:tritonclient yolov4:ubuntu18.04部署python client成功

X:\05_trition_yolov4_clients\01-python server代码在115上,client本想在windows上, 【ai】trition:tritonclient.utils.shared_memory 仅支持linux 看起来要分离。 【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 运行 client代码远程部署在ubuntu18.0…

微服务架构设计关键点总结

1.微服务架构设计通用语言 2.微服务架构组成 NFRS(非功能性需求)补充 3.DDD 省略 4.其他 Backend for frontend (BFF) pattern: 针对不同的客户端定义不同的api gateway API组合模式:一次性返回关联后的结果 eg:ap…

优思学院|精益生产3大特征、5个步骤、8大浪费、10大工具

前言 精益生产作为一种先进的生产管理理念,起源于丰田汽车公司的生产方式,其核心在于消除浪费、优化流程,以最少的投入获取最大的产出。本文将详细解析精益生产的三大特征、五个步骤、八大浪费和十大工具,帮助读者深入理解这一理…

ubuntu 18 虚拟机安装(2)

ubuntu 18 虚拟机安装(2) ● Ubuntu版本查看 lsb_release -a ● mysql 版本查看 mysql --version 安装 vi 安装vim: ubuntu预装的是vim tiny版本,而需要的是vim full版本。执行下面的语句安装vim full版本: $su…

威纶通模板元件功能使用,重复调用模板界面

目录 STEP 1 定义模板范围STEP 2 创建地址STEP 3 新建模板STEP 4 调用模板STEP 5 仿真测试 STEP 1 定义模板范围 选择元件-模板窗口 定义模板窗口范围 这是将窗口20-30定义为模板窗口 STEP 2 创建地址 定义几个标签地址,这里关联的内部地址 如果使用外部PLC地址…

【知识学习】Unity3D——Surface Shaderlightning的概念及使用方法示例

Unity3D是一个广泛使用的跨平台游戏引擎,它提供了强大的图形渲染功能。在Unity中,Shader是用于控制图形渲染过程的程序,它们运行在GPU上,用于计算屏幕上每个像素的颜色。Surface Shader和Lighting是Unity Shader编程中非常重要的概…

Apache HBase概述(图文并茂~)

HBase概述 1. Why we need HBase ? 在大数据时代来临之前,我们通常依赖传统的关系型数据库(如RDBMS)来处理数据存储和管理。然而,随着数据量的急剧增长和数据结构的多样化,传统数据库系统开始显露出其局限性…

​anaconda如何升级​

要升级Anaconda,可以通过以下步骤进行:12 首先,确保以管理员身份运行Anaconda Prompt。这是因为在升级过程中可能需要更改系统级的配置和包管理。升级conda本身。在开始升级Anaconda之前,需要确保conda自身是最新版本。可以通过…

深入探讨极限编程(XP):技术实践与频繁发布的艺术

目录 前言1. 极限编程的核心原则1.1 沟通1.2 简单1.3 反馈1.4 勇气1.5 尊重 2. 关键实践2.1 结对编程2.1.1 提高代码质量2.1.2 促进知识共享2.1.3 增强团队协作 2.2 测试驱动开发(TDD)2.2.1 提升代码可靠性2.2.2 提高代码可维护性2.2.3 鼓励良好设计 2.3…

RabbitMQ实践——临时队列

临时队列是一种自动删除队列。当这个队列被创建后,如果没有消费者监听,则会一直存在,还可以不断向其发布消息。但是一旦的消费者开始监听,然后断开监听后,它就会被自动删除。 新建自动删除队列 我们创建一个名字叫qu…

ee trade:黄金投资是选择短线交易还是长线投资

黄金投资既可以通过短线交易获取快速收益,也可以采取长线投资策略获得稳健回报。本文将详细比较这两种策略的特点和适用性,为新手投资者提供参考。 短线交易 短线交易指在较短的时间内多次买卖以获取利润,通常交易周期为数日到数周。以下是…

66Uptime – 网站服务器 Cronjob 监控工具 v35.0.0扩展中文版安装

66Uptime是一款自托管、易于使用、轻量级且高性能的网站服务器和Cronjob监控工具。以其丰富的功能和便捷的管理方式,为用户提供了全方位的网站服务器和Cronjob监控解决方案: 主要功能: 监控网站服务器和Cronjob的运行状态,确保它们…