pyqt之QNetworkAccessManager

QNetworkAccessManager是Qt自带的一个网络请求库,网上很多说的很模糊,在这总结一下

# coding: utf-8
import json
import sys
from pathlib import Path
from typing import Union
from urllib.parse import urlencodefrom PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager, QNetworkReply, QHttpMultiPart, QHttpPart
from PyQt5.QtCore import QUrl, pyqtSignal, QByteArray, QJsonDocument, QCoreApplication, QObject, QFile, QIODeviceclass NetworkRequestsManager(QObject):finished = pyqtSignal(QNetworkReply)def __init__(self, parent=None, *, encoding='utf-8'):super().__init__(parent)self._reply = None  # type: QNetworkReplyself._encoding = encodingself.networkAccessManager = QNetworkAccessManager(parent)self.networkAccessManager.finished.connect(self.finished)def get(self, url: Union[str, QUrl], params=None, headers=None):request = QNetworkRequest(self.__initUrl(url, params))self.__initHeaders(request, headers)self.networkAccessManager.get(request)def post(self, url: Union[str, QUrl], params: dict = None, json: dict = None, headers: dict = None):request = QNetworkRequest(self.__initUrl(url, params))self.__initHeaders(request, headers)self.networkAccessManager.post(request, self.__initJson(json))def file_post(self, url: Union[str, QUrl], file: dict, headers: dict = None):request = QNetworkRequest(self.__initUrl(url, params))multiPart = QHttpMultiPart(QHttpMultiPart.FormDataType)for item in file.items():httpPart = QHttpPart()file = QFile(item[1])file.open(QIODevice.ReadOnly)httpPart.setHeader(QNetworkRequest.ContentDispositionHeader,f'form-data; name="{item[0]}"; filename="{Path(item[1]).name}"')httpPart.setBodyDevice(file)file.setParent(multiPart)multiPart.append(httpPart)self.__initHeaders(request, headers)self.networkAccessManager.post(request, multiPart)def __initUrl(self, url: Union[str, QUrl], params: dict = None) -> QUrl:if isinstance(url, str):url = QUrl(url)url.setQuery(urlencode(params), QUrl.ParsingMode.TolerantMode)return urldef __initHeaders(self, request: QNetworkRequest, headers: dict = None):if headers is None:returnfor item in headers.items():request.setRawHeader(item[0].encode(), item[1].encode())def __initJson(self, json: dict = None):if json is None:returnreturn QJsonDocument(json).toJson()if __name__ == '__main__':# 这是一个联想壁纸的接口app = QCoreApplication(sys.argv)manager = NetworkRequestsManager()params = {"skip": "0","limit": "54","count": "76873","tagId": "-1","colorId": "-1","classId": "-1","refresh": "true","priceId": "0"}url = 'https://pc-store.lenovomm.cn/wallpapercontent/wallpaper/class_wallpaper_list'headers = {"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzbWJPcHRpb25zIjoiMSIsImJ1c2luZXNzS2V5IjoiIiwiY2hhbm5lbCI6IjIwMDA1IiwiZnJvbSI6ImluZHN0b3JlIiwidmVyc2lvbk5hbWUiOiI5LjAuMTMzMC4yMDEiLCJleHAiOjIzNDI4NjY3NzEsInZlcnNpb25Db2RlIjoiOS4wLjEzMzAuMjAxIn0.2_R46WPaT2BCy_NcbewdfosiSlLEMdNRX9cJIoqb6eY","user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&PCStore"}manager.get(QUrl(url), params, headers=headers)def response(reply: QNetworkReply):if reply.error() == reply.NoError:print(json.loads(reply.readAll().data().decode('utf-8')))else:print(reply.errorString())manager.finished.connect(response)sys.exit(app.exec_())

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

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

相关文章

关于 AssertionError: Torch not compiled with CUDA enabled 问题

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

javaWeb智能医疗管理系统

简介 在当今快节奏的生活中,智能医疗系统的崛起为医疗行业带来了一场革命性的变革。基于JavaWeb技术开发的智能医疗管理系统,不仅为医疗机构提供了高效、精准的管理工具,也为患者提供了更便捷、更个性化的医疗服务。本文将介绍一个基于SSM&a…

vue快速入门(二十九)echarts在vue中的使用

注释很详细&#xff0c;直接上代码 上一篇 新增内容 echarts.js的下载途径echarts的饼图示范 echarts.js&#xff0c;点击跳转&#xff0c;右键另存即可 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

python内置函数frozenset()详解

Python 内置函数 frozenset() 1. 概述 frozenset() 是 Python 中的一个内置函数&#xff0c;用于创建一个不可变的集合&#xff08;frozenset&#xff09;。与普通的集合&#xff08;set&#xff09;不同&#xff0c;frozenset 不能被修改&#xff0c;也不能添加或删除元素。…

小试牛刀!

1.从双倍数组中还原原数组&#xff08;力扣&#xff0c;vector&#xff09; java式c解法。 class Solution { public:vector<int> findOriginalArray(vector<int>& changed) {int n changed.size();if(n % 2 1) return {};map<int, int> mp;for(int c…

Applied Spatial Statistics(二)统计推断:排列测试

Applied Spatial Statistics&#xff08;二&#xff09;统计推断&#xff1a;排列测试 本笔记本演示了如何执行假设检验和 p 值计算的排列检验。 相关系数Moran’s I 相关性 import pandas as pd import matplotlib.pyplot as plt import numpy as np from scipy.stats imp…

pycharm永久改变sys.path

进入pycharm&#xff0c;选择file->settings->interpreter 在这里选择图中所示show all 再单击左上角减号右侧第三个&#xff0c;长得像思维导图的图标 之后添加你的路径&#xff0c;确认即可

2024最新面试跳槽,软件测试面试题的整理与解析

今天接着来说说测试工程师面试比较高频的面试题&#xff0c;大家可以通过面试题内的一些解析再结合自己的真实工作经验来进行答题思路的提取、整理。 硬背答案虽可&#xff0c;但容易翻车哦。能够举一反三才是重点&#xff01; 1&#xff1a;请介绍一下UI自动化测试中三种时间等…

【若依前后端分离】设置已选中内容条数

示例&#xff1a; 将已选中n行加在了分页中&#xff0c;有分页才可以选择已选中多少行。如果想要不加分页也可以展示已选中n行&#xff0c;自行修改部分代码即可。 关键代码&#xff1a; 这使用了span&#xff0c;可使用其他元素 使用了Vue.js的v-if指令来根据条件是否渲染该…

前端JS必用工具【js-tool-big-box】,时间日期转换学习一

这一小节&#xff0c;我们学习一下 js-tool-big-box 这个npm 前端工具库&#xff0c;关于时间日期格式转换的一部分&#xff0c;后续还会有。 目录 1 安装 2 项目中引入 3 工具使用 3.1 年月日时分秒的单独处理 3.2 以上方法中第一个参数 3.3 日期时间的转换 3.4 更个…

6.C++:继承

一、继承 //1.类中的保护和私有在当前类中没有差别&#xff1b; //2.在继承后的子类中有差别&#xff0c;private在子类中不可见&#xff0c;所以用protected&#xff1b; class person { public:void print(){cout << "name:" << _name << endl;c…

#是啥,v-slot插槽的区别

在 Vue 3.x 中&#xff0c;您还可以使用 # 简写来代替 v-slot v-slot&#xff1a; v-slot 是 Vue 2.6 和 Vue 3.x 推荐的新的插槽语法。 v-slot 用于具名插槽&#xff0c;它允许您为插槽指定名称&#xff0c;并允许您传递具名插槽的内容。 例如&#xff0c;以下是使用 v-slot…

设计模式: 行为型之备忘录模式(13)

备忘录模式概述 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态这样以后就可将该对象恢复到原先保存的状态。这种类型的设计模式属于行为模式在备…

【Qt 学习笔记】Qt常用控件 | 按钮类控件Push Button的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件Push Button的使用及说明 文章编号&#xff1…

2024年华中杯数学建模竞赛全攻略:ABC题思路解析+代码实现+数据集+论文撰写+全程答疑

引言 &#xff08;比赛后所有题目资料在文末获取呀&#xff09; 华中杯数学建模竞赛是数学建模领域的一项重要赛事&#xff0c;它不仅考验参赛者的数学建模能力&#xff0c;还考验了编程技能、数据分析能力和论文撰写能力。为了帮助参赛者更好地准备2024年的竞赛&#xff0c;本…

libftdi1学习笔记 6 - MPSSE QSPI

目录 1. 写 2. 读 3. 验证 QSPI采用4根线为数据口&#xff0c;SCK和CS保留同样的功能&#xff0c;一般&#xff14;个数据线采用MSB的方式发送数据&#xff0c;即高位在前。 QSPI只能是半双工工作。 1. 写 int qspiWriteBytes(uint8_t port, uint8_t* wrBuf, uint16_t l…

RAG学习笔记系列(一)

RAG 介绍 RAG 全称为 Retrieval Augmented Generation&#xff08;检索增强生成&#xff09;。是基于LLM构建系统的一种架构。 RAG 基本上可以理解为&#xff1a;搜索 LLM prompting。根据用户的查询语句&#xff0c;系统会先使用搜索算法获取到相关内容作为上下文&#xff0…

JavaScript如何设置定时器,怎么清除定时器

在JavaScript中&#xff0c;你可以使用setTimeout()和setInterval()函数来设置定时器&#xff0c;以及使用clearTimeout()和clearInterval()函数来清除定时器。 setTimeout() setTimeout()函数用于在指定的毫秒数之后执行一个函数或计算表达式。它返回一个表示定时器的ID&…

pnpm 报错: ERR_PNPM_META_FETCH_FAIL

今天突然遇到一个报错&#xff0c;pnpm 报错&#xff1a; ERR_PNPM_META_FETCH_FAIL  GET https://registry.npm.taobao.org/vue%2Fcli-service: request to https://registry.npm.taobao.org/vue%2Fcli-service failed, reason: certificate has expired问题原因&#xff1a;…

when语法学习及判断主机别名实例

目录 1、概念 2、实例配置 2.1 编写剧本体验when的用法 2.2 执行剧本文件 2.3 使用ansible临时命令进行测试 1、概念 when是用于判断的语法&#xff0c;将其用在每个动作的下方进行判断&#xff0c;使得只有在满足条件才会执行。 2、实例配置-判断主机别名 在每个客户端中…