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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MonkeyKing.sun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值