[白月黑羽]关于仿写类postman功能软件题目的解答

原题:
在这里插入图片描述
答:
python文件如下

from PySide6.QtWidgets import QApplication, QMessageBox,QTableWidgetItem,QHeaderView,QWidget,QTableWidget
from PySide6.QtCore import QEvent,QObject
from PySide6.QtUiTools import QUiLoader
import time
import requestsuiLoader = QUiLoader()class TableWidgetFilter(QObject):def __init__(self, parent=None):super(TableWidgetFilter, self).__init__(parent)def eventFilter(self, watched, event):if event.type() == QEvent.MouseButtonRelease:idx = watched.parentWidget().indexAt(event.position().toPoint())if(idx.row() < 0):watched.parentWidget().setCurrentItem(None)return super(TableWidgetFilter, self).eventFilter( watched, event)# 用于打印请求消息, 参数为 PreparedRequest 对象
def pretty_print_request(req):if req.body == None:msgBody = ''else:msgBody = req.body# 打印请求消息,如果为空不拼接进去result = '\n----------- 发送请求 -----------'if req.method!= None and req.url!= None:result = result + '\n' + req.method + ' ' + req.url if req.headers != None and len(req.headers) > 0:result = result +  '\n' result = result + str('\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()))if msgBody!= '':result = result + str('\n' + msgBody)return result# 用于打印响应消息
def pretty_print_response(res) -> str:result = '\n----------- 得到响应 -----------'if res.status_code!= None:result = result + str('\nHTTP/1.1 '+ str(res.status_code))if res.headers!= None and len(res.headers) > 0:result = result + '\n' result = result + str('\n'.join('{}: {}'.format(k, v) for k, v in res.headers.items()))if res.text!= '':result = result + str('\n' + res.text)return resultclass MainWindow:def __init__(self):self.ui = uiLoader.load('.\\main.ui')self.ui.addBtn.clicked.connect(self.add_header)self.ui.removeBtn.clicked.connect(self.remove_header)self.ui.headersTable.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)# 创建事件过滤器实例self.event_filter = TableWidgetFilter(self.ui.headersTable)self.ui.headersTable.viewport().installEventFilter(self.event_filter)self.ui.clearBtn.clicked.connect(self.clear_result)self.ui.sendBtn.clicked.connect(self.send)def add_header(self):self.ui.headersTable.insertRow(self.ui.headersTable.rowCount())def remove_header(self):row = self.ui.headersTable.currentRow()if row >= 0:self.ui.headersTable.removeRow(row)self.ui.headersTable.setCurrentItem(None)def send(self):#获取多个数据源request_type = self.ui.requestBox.currentText()request_url = self.ui.urlEdit.text()request_headers = {}for i in range(self.ui.headersTable.rowCount()):if self.ui.headersTable.item(i, 0) == None or self.ui.headersTable.item(i, 1) == None:continuekey = self.ui.headersTable.item(i, 0).text()value = self.ui.headersTable.item(i, 1).text()request_headers[key] = valuerequest_body = self.ui.bodyEdit.toPlainText()try:req = requests.Request(request_type, request_url, headers=request_headers, data=request_body)      prepared = req.prepare()except requests.exceptions.RequestException as e:QMessageBox.warning(self.ui, "错误", "请求参数错误\n" + str(e))returnself.ui.resultText.appendPlainText(pretty_print_request(prepared))#发送包try:res = requests.Session().send(prepared)self.ui.resultText.appendPlainText(pretty_print_response(res))except requests.exceptions.RequestException as e:QMessageBox.warning(self.ui, "错误", "请求失败\n" + str(e))returndef clear_result(self):self.ui.resultText.clear()app = QApplication([])
mainWindow = MainWindow()
mainWindow.ui.show()
app.exec()

动态加载的main.ui文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>Form</class><widget class="QWidget" name="Form"><property name="geometry"><rect><x>0</x><y>0</y><width>534</width><height>519</height></rect></property><property name="windowTitle"><string>HTTP接口测试</string></property><layout class="QVBoxLayout" name="verticalLayout_3"><item><layout class="QVBoxLayout" name="verticalLayout_2"><item><layout class="QHBoxLayout" name="horizontalLayout"><item><widget class="QComboBox" name="requestBox"><item><property name="text"><string>GET</string></property></item><item><property name="text"><string>POST</string></property></item></widget></item><item><widget class="QLineEdit" name="urlEdit"/></item><item><widget class="QPushButton" name="sendBtn"><property name="text"><string>发送</string></property></widget></item></layout></item><item><widget class="Line" name="line"><property name="orientation"><enum>Qt::Horizontal</enum></property></widget></item><item><widget class="QSplitter" name="splitter_3"><property name="orientation"><enum>Qt::Horizontal</enum></property><widget class="QSplitter" name="splitter_2"><property name="orientation"><enum>Qt::Vertical</enum></property><widget class="QSplitter" name="splitter"><property name="orientation"><enum>Qt::Horizontal</enum></property><widget class="QLabel" name="label"><property name="font"><font><pointsize>12</pointsize></font></property><property name="layoutDirection"><enum>Qt::LeftToRight</enum></property><property name="text"><string>消息头</string></property><property name="alignment"><set>Qt::AlignCenter</set></property></widget><widget class="QPushButton" name="addBtn"><property name="sizePolicy"><sizepolicy hsizetype="Fixed" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>50</width><height>16777215</height></size></property><property name="text"><string>+</string></property></widget><widget class="QPushButton" name="removeBtn"><property name="sizePolicy"><sizepolicy hsizetype="Fixed" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>50</width><height>16777215</height></size></property><property name="text"><string>-</string></property></widget></widget><widget class="QTableWidget" name="headersTable"><column><property name="text"><string>名称</string></property></column><column><property name="text"><string></string></property></column></widget></widget><widget class="Line" name="line_2"><property name="minimumSize"><size><width>15</width><height>0</height></size></property><property name="orientation"><enum>Qt::Vertical</enum></property></widget><widget class="QWidget" name="layoutWidget_2"><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QLabel" name="label_2"><property name="font"><font><pointsize>12</pointsize></font></property><property name="text"><string>消息体</string></property><property name="alignment"><set>Qt::AlignCenter</set></property></widget></item><item><widget class="QPlainTextEdit" name="bodyEdit"><property name="enabled"><bool>true</bool></property></widget></item></layout></widget></widget></item><item><widget class="Line" name="line_3"><property name="orientation"><enum>Qt::Horizontal</enum></property></widget></item><item><widget class="QPlainTextEdit" name="resultText"><property name="readOnly"><bool>true</bool></property></widget></item><item alignment="Qt::AlignHCenter"><widget class="QPushButton" name="clearBtn"><property name="maximumSize"><size><width>75</width><height>16777215</height></size></property><property name="text"><string>清除</string></property></widget></item></layout></item></layout></widget><resources/><connections/>
</ui>

使用效果:
请添加图片描述

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

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

相关文章

零基础Java第十八期:图书管理系统

目录 一、package book 1.1. Book 1.2. BookList 二、package user 2.1. User 2.2. NormalUser与AdminiUser 三、Main 四、NormalUser与AdminiUser的菜单界面 五、package operation 5.1. 设计管理员菜单 六、业务逻辑 七、完整代码 今天博主来带大家实现一个…

系统架构师考试极限18天备考复盘(2024年11月)

前言 写下这篇复盘笔记的时候还没有出成绩。目前泽崽还是在读研究生&#xff0c;在经过 大概2周多个全日 的极限备考之后&#xff0c;于11月10日参加了软考的系统架构师考试&#xff08;高级&#xff09;。目前对于“基础知识-案例分析-论文”的估分预期大概是&#xff1a;55-…

Unity肢体控制(关节控制)

前面的基础搭建网上自己搜&#xff0c;我这个任务模型网上也有&#xff0c;可以去官网看看更多模型&#xff0c;这里只讲述有模型如何驱动肢体的操作方式 第一步&#xff1a;创建脚本 第二步&#xff1a;创建Rig Builder 建空容器 加部件&#xff08;Rig&#xff09;,加了之后…

二叉树遍历的非递归实现和复杂度分析

一&#xff0c;用栈实现二叉树先序遍历 1&#xff0c;原理 我用自己的口水话解释一下&#xff1a;准备一个栈&#xff0c;从根节点开始&#xff0c;先判断栈是否为空&#xff0c;如果否&#xff0c;就弹出一个元素&#xff0c;对弹出元素进行自定义处理&#xff0c;再将它的左…

redis序列化数据查询

可以看到是HashMap&#xff0c;那么是序列化的数据 那么我们来获得反序列化数据 import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; import redis.clients.jedis.Jedis;public class RedisDeserializeDemo {public static…

球差控制操作数【ZEMAX操作数】

在光学设计中&#xff0c;对于球差的控制是必要的&#xff0c;那么在zemax中如何控制球差的大小&#xff0c;理解球差&#xff0c;以及使用相应操作数控制球差&#xff1b; 在这篇中主要写如何使用zemax操作数去控制或者消除球差&#xff0c;对球差进行简单的描述&#xff0c;之…

学习threejs,使用TWEEN插件实现动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PLYLoader PLY模型加…

前端 JS 实用操作总结

目录 1、重构解构 1、数组解构 2、对象解构 3、...展开 2、箭头函数 1、简写 2、this指向 3、没有arguments 4、普通函数this的指向 3、数组实用方法 1、map和filter 2、find 3、reduce 1、重构解构 1、数组解构 const arr ["唐僧", "孙悟空&quo…

从0开始学习--Day26--聚类算法

无监督学习(Unsupervised learning and introduction) 监督学习问题的样本 无监督学习样本 如图&#xff0c;可以看到两者的区别在于无监督学习的样本是没有标签的&#xff0c;换言之就是无监督学习不会赋予主观上的判断&#xff0c;需要算法自己去探寻区别&#xff0c;第二张…

矩阵数组转置

#include<stdio.h> int main() {int arr1[3][4];//三行四列变成四行三列int arr2[4][3];for(int i0;i<3;i)//三行{for(int j0;j<4;j)//四列{scanf("%d",&arr1[i][j]);//录入}}for(int i0;i<3;i)//转置{for(int j0;j<4;j){arr2[j][i]arr1[i][j]…

利用正则表达式批量修改文件名

首先&#xff0c; 我们需要稍微学习一下正则表达式的使用方式&#xff0c;可以看这里&#xff1a;Notepad正则表达式使用方法_notepad正则匹配-CSDN博客 经过初步学习之后&#xff0c;比较重要的内容我做如下转载&#xff1a; 元字符是正则表达式的基本构成单位&#xff0c;它们…

rust高级特征

文章目录 不安全的rust解引用裸指针裸指针与引用和智能指针的区别裸指针使用解引用运算符 *&#xff0c;这需要一个 unsafe 块调用不安全函数或方法在不安全的代码之上构建一个安全的抽象层 使用 extern 函数调用外部代码rust调用C语言函数rust接口被C语言程序调用 访问或修改可…

【How AI Works】读书笔记3 出发吧! AI纵览 第二部分

目录 1.说明 2.第二部分(P9~P10) 机器学习算法总结(监督学习) 3.单词 4.专业术语 1.说明 书全名:How AI Works From Sorcery to Science 作者 Ronald T.Kneusel 2.第二部分(P9~P10) 总结机器学习算法 作者把机器学习的过程比喻成输入-->黑盒-->输出 这里的标签可…

HarmonyOS NEXT应用开发实战 ( 应用的签名、打包上架,各种证书详解)

前言 没经历过的童鞋&#xff0c;首次对HarmonyOS的应用签名打包上架可能感觉繁琐。需要各种秘钥证书生成和申请&#xff0c;混在一起也分不清。其实搞清楚后也就那会事&#xff0c;各个文件都有它存在的作用。 HarmonyOS通过数字证书与Profile文件等签名信息来保证鸿蒙应用/…

【自用】0-1背包问题与完全背包问题的Java实现

引言 背包问题是计算机科学领域的一个经典优化问题&#xff0c;分为多种类型&#xff0c;其中最常见的是0-1背包问题和完全背包问题。这两种问题的核心在于如何在有限的空间内最大化收益&#xff0c;但它们之间存在一些关键的区别&#xff1a;0-1背包问题允许每个物品只能选择…

Python_爬虫3_Requests库网络爬虫实战(5个实例)

目录 实例1&#xff1a;京东商品页面的爬取 实例2&#xff1a;亚马逊商品页面的爬取 实例3&#xff1a;百度360搜索关键词提交 实例4&#xff1a;网络图片的爬取和存储 实例5&#xff1a;IP地址归地的自动查询 实例1&#xff1a;京东商品页面的爬取 import requests url …

黑马微项目

目录 1 飞机票 2 生成一个五位数验证码 3 数字加密 4 数字解密 5 抢红包 6 双色球系统 7 用户登录 8 金额转换 9 手机号屏蔽 10 罗马数字转换 11 调整字符串 12 初级学生管理系统&#xff08;学生数据的管理&#xff09; 13 学生管理系统&#xff08;用户的相关操…

C2M柔性制造模式

C2M柔性制造模式&#xff08;Customer-to-Manufacturer&#xff0c;客户到制造商的柔性制造模式&#xff09;是一种新型的生产模式&#xff0c;强调客户需求与制造过程的直接对接&#xff0c;并且能够快速响应和适应客户个性化的定制需求。这种模式结合了定制化生产与智能制造&…

IoT [remote electricity meter]

IoT [remote electricity meter] 物联网&#xff0c;远程抄表&#xff0c;电表数据&#xff0c;举个例子

2、开发工具和环境搭建

万丈高楼平地起&#xff0c;学习C语言先从安装个软件工具开始吧。 1、C语言软件工具有两个作用 1、编辑器 -- 写代码的工具 2、编译器 -- 将代码翻译成机器代码0和1 接下来我们介绍两种C语言代码工具&#xff1a;devcpp 和 VS2019&#xff0c;大家可以根据自己的喜好安装。 dev…