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中显示这些信息。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyQt6是一个用于创建图形用户界面(GUI)的Python库,它是基于Qt框架的Python绑定。Qt是一个跨平台的应用程序开发框架,可以用于开发桌面应用程序、移动应用程序和嵌入式系统等。 在PyQt6,可以使用QKeyEvent和QMouseEvent类来记录键盘和鼠标事件。下面是一个简单的示例代码,演示了如何记录键盘和鼠标事件: ```python from PyQt6.QtWidgets import QApplication, QMainWindow from PyQt6.QtCore import Qt class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Key and Mouse Event Example") self.setGeometry(100, 100, 300, 200) def keyPressEvent(self, event): key = event.key() modifiers = QApplication.keyboardModifiers() if modifiers == Qt.KeyboardModifier.ControlModifier: print("Ctrl +", Qt.Key.toUnicode(key)) else: print(Qt.Key.toUnicode(key)) def mousePressEvent(self, event): button = event.button() pos = event.pos() print("Mouse Pressed:", button, "at", pos.x(), pos.y()) app = QApplication([]) window = MainWindow() window.show() app.exec() ``` 在上面的代码,我们创建了一个继承自QMainWindow的MainWindow类,并重写了keyPressEvent和mousePressEvent方法来处理键盘和鼠标事件。在keyPressEvent方法,我们可以通过event.key()获取按下的键的代码,并通过QApplication.keyboardModifiers()获取修饰键的状态。在mousePressEvent方法,我们可以通过event.button()获取按下的鼠标按钮的代码,并通过event.pos()获取鼠标点击的位置。 你可以根据自己的需求对上面的代码进行修改和扩展,以满足记录键盘和鼠标事件的具体要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值