18.1 PyQt5网络编程-QNetworkAccessManager
yund56 2025-03-11 16:33 4 浏览
1.QNetworkAccessManager简介
在 PyQt5 中的网络编程涉到 QNetworkAccessManager、QNetworkRequest 和 QNetworkReply这几个类来处理网络请求和响应。
2.QNetworkAccessManager案例
import sys
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from PyQt5.QtCore import QUrl
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 设置主窗口
self.setWindowTitle('PyQt5网络编程')
self.resize(600, 400)
# 创建中心小部件和布局
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
self.layout = QVBoxLayout(self.central_widget)
# 创建标签用于显示网络响应
self.label = QLabel('网络请求结果:')
self.label_1 = QLabel('等待网络返回...')
self.layout.addWidget(self.label)
self.layout.addWidget(self.label_1)
# 创建网络访问管理器
self.network_manager = QNetworkAccessManager()
self.network_manager.finished.connect(self.on_finished)
# 发起网络请求
url = QUrl('https://api.oick.cn/api/dutang')
request = QNetworkRequest(url)
self.reply = self.network_manager.get(request)
def on_finished(self, reply):
if reply.error() == QNetworkReply.NoError:
response_data = reply.readAll().data().decode('utf-8')
self.label_1.setText(response_data)
else:
self.label.setText('Error: {}'.format(reply.errorString()))
reply.deleteLater()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3.运行结果
4.QNetworkAccessManager常用方法和属性
方法和属性 | 描述 |
get(request: QNetworkRequest) | 发起GET请求,参数为 QNetworkRequest 对象,返回一个QNetworkReply对象,代表服务器的响应结果 |
post(request: QNetworkRequest, data: Union[QByteArray, bytes, bytearray]) | 发起POST请求。参数:QNetworkRequest:请求对象;data:要发送的数据,可以是 QByteArray、str 或 bytes |
put(request: QNetworkRequest, data: Union[QByteArray, bytes, bytearray]) | 发起PUT请求。参数:QNetworkRequest:请求对象;data:要发送的数据,可以是 QByteArray、str 或 bytes |
deleteResource(request: QNetworkRequest) | 发起DELETE请求 |
head(request: QNetworkRequest) | 发起HEAD请求,类似于GET请求,但只获取响应的头部信息,不获取实际的内容 |
setProxy(proxy: QNetworkProxy) | 设置代理,例如: QNetworkProxy(QNetworkProxy.HttpProxy, "proxy.example.com", 8080) QNetworkProxy代理类型: NoProxy:不使用代理 DefaultProxy:使用系统默认代理 HttpProxy:HTTP 代理 Socks5Proxy:Socks5 代理 |
proxy() | 返回当前使用的代理 |
setCache(cache: Optional[QAbstractNetworkCache]) | 设置网络请求使用的缓存对象 |
cache() | 返回当前使用的缓存对象 |
setNetworkAccessible(accessible: QNetworkAccessManager.NetworkAccessibility) | 设置网络的可访问性,可以设置为 |
networkAccessible() | 返回网络的可访问性,返回NetworkAccessibility |
clearConnectionCache() | 清除连接缓存,关闭所有已建立的网络连接 |
setConfiguration(config: QNetworkConfiguration) | 设置网络的配置,如使用特定的网络接口 |
configuration() | 获取当前的网络配置 |
setProxyFactory(factory: Optional[QNetworkProxyFactory]) | 设置代理工厂,参数QNetworkProxyFactory是一个抽象类,允许根据不同的请求设置不同的代理 |
proxyFactory() | 获取当前代理工厂信息,返回QNetworkProxyFactory |
5.QNetworkRequest常用方法和属性
方法和属性 | 描述 |
setUrl(url: QUrl) | 设置请求的 URL |
url() | 获取请求的URL |
setHeader(header: QNetworkRequest.KnownHeaders, value: Any) | 设置请求头 |
header(header: QNetworkRequest.KnownHeaders) | 获取指定的请求头信息,请求头详见下方KnownHeaders请求头枚举值 |
setRawHeader(headerName: Union[QByteArray, bytes, bytearray], value: Union[QByteArray, bytes, bytearray]) | 设置自定义的原始请求头部信息,例如:setRawHeader(headerName="User-Agent", value="MyApp/1.0") |
rawHeader(headerName: Union[QByteArray, bytes, bytearray]) | 获取指定原始头部的值 |
rawHeaderList() | 返回请求中所有原始头部名称的列表 |
setAttribute(code: QNetworkRequest.Attribute, value: Any) | 设置请求的属性,属性可以包括缓存策略、HTTP 协议类型等,详见下方Attribute枚举值 |
attribute(code: QNetworkRequest.Attribute, defaultValue: Any = None) | 获取请求属性的值,如果未设置则返回默认值 |
setPriority(priority: QNetworkRequest.Priority) | 设置请求的优先级。优先级可以是 |
priority() | 获取请求的优先级 |
setTransferTimeout(timeout: int) | 设置请求的传输超时时间(毫秒) |
transferTimeout() | 获取传输超时时间 |
KnownHeaders请求头枚举值:
- QNetworkRequest.ContentTypeHeader: 设置请求的 Content-Type 头部,用于指明请求体的数据格式。
- QNetworkRequest.ContentLengthHeader: 设置请求的 Content-Length 头部,用于指明请求体的长度。
- QNetworkRequest.User: 用户定义的头部。
- QNetworkRequest.LastModifiedHeader: 设置请求的 Last-Modified 头部,用于指明资源最后一次修改的时间。
- QNetworkRequest.DateHeader: 设置请求的 Date 头部,用于指明请求的时间戳。
- QNetworkRequest.CacheControlHeader: 设置请求的 Cache-Control 头部,用于控制缓存行为。
- QNetworkRequest.ConnectionHeader: 设置请求的 Connection 头部,用于指明连接保持的方式。
- QNetworkRequest.KeepAliveHeader: 设置请求的 Keep-Alive 头部,用于维持连接。
- QNetworkRequest.AcceptHeader: 设置请求的 Accept 头部,用于指明客户端接受的内容类型。
- QNetworkRequest.AcceptCharsetHeader: 设置请求的 Accept-Charset 头部,用于指明客户端接受的字符集。
- QNetworkRequest.AcceptEncodingHeader: 设置请求的 Accept-Encoding 头部,用于指明客户端接受的内容编码。
- QNetworkRequest.AcceptLanguageHeader: 设置请求的 Accept-Language 头部,用于指明客户端接受的语言。
- QNetworkRequest.AuthorizationHeader: 设置请求的 Authorization 头部,用于提供认证信息。
- QNetworkRequest.CookieHeader: 设置请求的 Cookie 头部,用于发送客户端的 Cookie 信息。
- QNetworkRequest.ExpectHeader: 设置请求的 Expect 头部,用于指明客户端期望的响应行为。
- QNetworkRequest.IfMatchHeader: 设置请求的 If-Match 头部,用于条件请求。
- QNetworkRequest.IfModifiedSinceHeader: 设置请求的 If-Modified-Since 头部,用于条件请求。
- QNetworkRequest.IfNoneMatchHeader: 设置请求的 If-None-Match 头部,用于条件请求。
- QNetworkRequest.IfRangeHeader: 设置请求的 If-Range 头部,用于条件请求。
- QNetworkRequest.IfUnmodifiedSinceHeader: 设置请求的 If-Unmodified-Since 头部,用于条件请求。
- QNetworkRequest.MaxForwardsHeader: 设置请求的 Max-Forwards 头部,用于限制请求的转发次数。
- QNetworkRequest.ProxyAuthorizationHeader: 设置请求的 Proxy-Authorization 头部,用于提供代理认证信息。
- QNetworkRequest.TEHeader: 设置请求的 TE 头部,用于指明传输编码能力。
- QNetworkRequest.UpgradeHeader: 设置请求的 Upgrade 头部,用于指明协议升级请求。
- QNetworkRequest.ViaHeader: 设置请求的 Via 头部,用于指明中间节点。
- QNetworkRequest.WarningHeader: 设置请求的 Warning 头部,用于传递警告信息。
- QNetworkRequest.TransferEncodingHeader: 设置请求的 Transfer-Encoding 头部,用于指明传输编码方式。
Attribute枚举值
- HttpStatusCodeAttribute: HTTP 响应的状态码。
- RedirectionTargetAttribute: 重定向的目标 URL。
- ConnectionEncryptedAttribute: 表示连接是否加密(HTTPS)。
- CacheLoadControlAttribute: 控制缓存的加载策略。
- CacheSaveControlAttribute: 决定响应是否应该保存到缓存中。
- SourceIsFromCacheAttribute: 表示响应是否来自缓存。
- DoNotBufferUploadDataAttribute: 控制上传的数据是否应缓冲。
6.QNetworkReply常用方法和属性
方法和属性 | 描述 |
error() | 获取请求的错误代码 |
errorString() | 获取请求错误的详细描述 |
bytesAvailable() | 返回可用的响应数据的字节数。用于读取尚未读取的数据量 |
hasRawHeader(headerName: Union[QByteArray, bytes, bytearray]) | 检查是否存在指定的原始头部 |
rawHeader(headerName: Union[QByteArray, bytes, bytearray]) | 获取指定原始头部的值 |
header(header: QNetworkRequest.KnownHeaders) | 获取标准请求头的值 |
url() | 获取请求的 URL |
attribute(code: QNetworkRequest.Attribute) | 获取请求属性的值 |
isFinished() | 检查请求是否完成 |
isRunning() | 检查请求是否正在运行 |
readAll() | 读取所有响应数据。通常在处理完响应时调用 |
deleteLater() | 将对象标记为待删除状态,当事件处理完成后会被自动删除。有助于防止内存泄漏。 |
7.QNetworkAccessManager常用信号
方法 | 描述 |
finished(QNetworkReply*) | 当一个网络请求完成时(无论成功或失败),触发此信号。此信号携带一个 QNetworkReply 对象,该对象包含了请求的响应数据或错误信息 |
sslErrors(QNetworkReply*, const QList | 当 HTTPS 请求过程中发生 SSL 错误时触发此信号,也可使用reply.ignoreSslErrors()方法来忽略错误。参数:QNetworkReply*: 产生 SSL 错误的网络请求的响应对象;QList |
authenticationRequired(QNetworkReply, QAuthenticator) | 当服务器需要身份验证时触发此信号。可以在此信号中设置 QAuthenticator 的用户名和密码来进行身份验证。例如:authenticator.setUser("username") authenticator.setPassword("password") |
proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*) | 当代理服务器需要身份验证时触发此信号。可以在此信号中为代理设置认证信息。例如:authenticator.setUser("proxyuser") authenticator.setPassword("proxypassword") |
networkAccessibleChanged(QNetworkAccessManager.NetworkAccessibility) | 当网络的可访问性发生变化时触发此信号。返回新的网络可访问状态。可能是一下之一:Accessible: 网络可访问;NotAccessible: 网络不可访问;UnknownAccessibility: 网络可访问性未知 |
encrypted(QNetworkReply*) | 当使用 SSL/TLS 加密的请求已经成功建立安全连接时触发此信号 |
8.QNetworkReply常用信号
方法 | 描述 |
downloadProgress(qint64 bytesReceived, qint64 bytesTotal) | 下载进度更新时发射的信号,bytesReceived:已经接收到的字节数;bytesTotal:总共需要接收的字节数 |
uploadProgress(qint64 bytesSent, qint64 bytesTotal) | 上传进度更新时发射的信号,bytesSent:已经发送的字节数;bytesTotal:总共需要发送的字节数 |
相关推荐
- 一对多查询,Vlookup公式组合Countifs,详细解读!
-
我们模拟工作中的使用场景,只保留了关键的两列数据需要根据部门条件,把所有的员工信息给匹配出来首先,当存在多个结果值时,我们去查找的时候,只会返回第一个出现的值:=VLOOKUP(D2,A:B,2,0)...
- 自动获取vlookup函数的第三参数,再也不用一列一列的数了
-
对于vlookup函数,很多人都有会这样的想法:vlookup函数的第三参数为什么就不能自动的获取到呢,还需要一个一个的数太烦人了。有没有什么方法能自动的获取vlookup函数的第三参数呢?当然有了,...
- VLOOKUP函数比对一般用法
-
格式"=VLOOKUP(要查谁,在哪查,返还值为查询范围的第几列,精确还是近似)"。中间用逗号隔开。如:A列为全部人员姓名,B列为对应全部身份证号码,C列为部分人员姓名(有在A列里的,...
- VLOOKUP的这些坑,你都知道吗?
-
VLOOKUP的这些坑,你都知道吗?VLOOKUP是大家常用的查找引用函数,很多人正式学习Excel都是从这个函数开始的,但有的时候VLOOKUP却不太听话,公式返回错误结果,让人苦不堪言。有时明明数...
- 重塑Excel体验:VLOOKUP与公式联动,轻松实现多列信息一键匹配!
-
真心羡慕啊!每次我都要慢悠悠地一个个用VLOOKUP去找数据,跟蜗牛爬似的慢,还容易出错,可你看看人家同事,手一挥,几十秒就搞定了,那叫一个利索!步骤一:输入VLOOKUP函数并设置查找值在需要输入公...
- 巧用Vlookup函数揪出“第三者”
-
在一张Excel表格的重复记录中,让你快速列出每种不同物品第2次或第n次出现的记录,你会怎么做?Vlookup函数就有这个本事。举例来说,产品或者物流表格中往往会记录有同一货物的多笔数据(如下图的今日...
- 一次匹配多个值,Vlookup、Xlookup、Filter公式,你用哪个
-
举个工作实例,左边是员工信息表数据需要根据编号,把后面所有的信息一次性的匹配出来工作中,经常遇到这种问题,有3个公式,可以快速的解决,分别是VLOOKUP公式,XLOOKUP公式,Filter公式1、...
- Excel实例:VLOOKUP与XLOOKUP双条件精确查找、模糊查找
-
咱们今天通过实例聊聊VLOOKUP和XLOOKUP,看看它们在精确和模糊查找上有什么不同。我们假设有一个数据表,这个表里有地区、品类以及对应的金额。根据大区和品类这两个条件,来查找并匹配出相应的金额数...
- 带超链接的Vlookup公式查找匹配,你会么
-
举个例子,左边有源数据,现在我们需要根据部分员工数据,查找匹配工资,并且带一个超链接,当我们点击工资数据时,自动跳转到原数据位置1、查找结果正常我们想查找匹配出结果,用vlookup公式,或xlook...
- Vlookup公式查找出错,原表明明有数据
-
Vlookup公式天天用,但是经常出错,还找不出原因,今天分享3步检查曲,举个工作中的例子:左边是工资表,需要查找匹配部分员工的工资数据1、公式引用出错我们使用VLOOKUP公式,查找匹配,输入的公式...
- 不用嵌套其它函数,VlOOKUP实现一对多查找
-
在处理日常工作时,我们常会遇到一份详细的花名册,其中记录了众多人员的多项信息。然而,当需要从这份名单中快速提取特定人员的相关资料时,一个常见的问题是:目标信息与花名册中的列顺序并不一致。如图所示:面对...
- VLOOKUP函数开挂用法:多表多文件多区域查找大揭秘
-
在日常办公中,Excel堪称我们的得力助手,而VLOOKUP函数更是其中的明星,被大家广泛运用,堪称“数据查找神器”。说起VLOOKUP函数,相信大家都不陌生。最常见的用法,就是在一个表...
- 按需填充 根据指定数字填充重复数据
-
由于公司启用了新标签,现在需要根据盘点产品数重新打印指定数量的标签。比如冰箱4台,洗衣机2台,那么就要在D2:D5数据区域复制4个重复的冰箱品名、2个重复的洗衣机品名,以此类推(图1)。手动复制容易出...
- 那些可以替代VLOOKUP的函数们!
-
大家好,今天我们来讲讲那些和VLOOKUP功能一样的函数们,但是却没有VLOOKUP函数那么有名气,所有总是嫉妒VLOOKUP函数。VLOOKUP函数大家肯定都很熟悉了。VLOOKUP函数是一个查询类...
- VLOOKUP跨表查找,你会吗?
-
VLOOKUP跨表查找,你会吗?VLOOKUP函数是大家最常用的查找引用函数,我们在工作中经常用它按照条件查找对应的数据,但是当数据源分散在多张工作表中时,你知道怎么跨表查找吗?今天我通过一个Exce...
- 一周热门
- 最近发表
- 标签列表
-
- filter函数js (37)
- filter函数excel用不了 (73)
- 商城开发 (40)
- 影视网站免费源码最新版 (57)
- 影视资源api接口 (46)
- 网站留言板代码大全 (56)
- java版软件下载 (52)
- java教材电子课本下载 (48)
- 0基础编程从什么开始学 (50)
- java是用来干嘛的 (51)
- it入门应该学什么 (55)
- java线上课程 (55)
- 学java的软件叫什么软件 (38)
- 程序开发软件有哪些 (53)
- 软件培训 (59)
- 机器人编程代码大全 (50)
- 少儿编程教程免费 (45)
- 新代系统编程教学 (61)
- 共创世界编程网站 (38)
- 亲测源码 (36)
- 三角函数积分公式表 (35)
- 函数的表示方法 (34)
- 表格乘法的公式怎么设置 (34)
- sumif函数的例子 (34)
- 图片素材 (36)