18.1 PyQt5网络编程-QNetworkAccessManager
yund56 2025-03-11 16:33 13 浏览
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:总共需要发送的字节数 |
相关推荐
- SM小分队Girls on Top,女神战队少了f(x)?
-
这次由SM娱乐公司在冬季即将开演的smtown里,将公司的所有女团成员集结成了一个小分队project。第一位这是全面ACE的大姐成员权宝儿(BoA),出道二十年,在日本单人销量过千万,韩国国内200...
- 韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出
-
AmazeVR宣布将在十月份举办一场现场VR音乐会,观众将佩戴MetaQuest3进行体验。韩国女团aespa于2020年11月出道,此后在日本推出了三张金唱片,在韩国推出了...
- 韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend
-
身高163的Giselle,长腿傲人,身材比例绝了...
- 假唱而被骂爆的女团:IVE、NewJeans、aespa上榜
-
在韩国,其实K-pop偶像并不被认为是真正的歌手,因为偶像们必须兼备舞蹈能力、也经常透过对嘴来完成舞台。由于科技的日渐发达,也有许多网友会利用消音软体来验证K-pop偶像到底有没有开麦唱歌,导致假唱这...
- 新女团Aespa登时尚大片 四个少女四种style
-
来源:环球网
- 韩国女团aespa新歌MV曝光 画面梦幻造型超美
-
12月20日,韩国女团aespa翻唱曲《DreamsComeTrue》MV公开,视频中,她们的造型超美!WINTER背后长出一双梦幻般的翅膀。柳智敏笑容甜美。宁艺卓皮肤白皙。GISELLE五官精致...
- 女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA
-
女英雄萨勒芬妮(Seraphine)是拳头在2020年推出的第五位新英雄,在还没有正式上线时就备受lsp玩家的关注,因为她实在是太可爱了。和其他新英雄不同的是,萨勒芬妮在没上线时就被拳头当成虚拟偶像来...
- 人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?
-
现在的人气TOP女团是?INS粉丝数见分晓!现在爱豆和粉丝之间的交流方法变得多种多样,但是Instagram依然是主要的交流手段。很多粉丝根据粉丝数评价偶像的人气,拥有数百、数千万粉丝的组合作为全球偶...
- 韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞
-
WelcometoDrama.Pleasefollow4ruleswhilewatchingtheDrama.·1)Lookbackimmediatelywhenyoufe...
- aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」
-
记者刘宛欣/综合报导南韩造星工厂SM娱乐曾打造出东方神起、SUPERJUNIOR、少女时代、SHINee、EXO等传奇团体,近年推出的aespa、RIIZE更是双双成为新生代一线团体,深受大众与粉丝...
- 南韩最活跃的女团aespa,新专辑《Girls》即将发布,盘点昔日经典
-
女团aespa歌曲盘点,新专辑《Girls》即将发布,期待大火。明天也就是2022年的7月8号,aespa新专辑《Girls》即将发行。这是继首张专辑《Savage》之后,时隔19个月的第二张专辑,这...
- 章泽天女团aespa出席戛纳晚宴 宋康昊携新片亮相
-
搜狐娱乐讯(山今/文玄反影/图科明/视频)法国时间5月23日晚,女团aespa、宋康昊、章泽天等明星亮相戛纳晚宴。章泽天身姿优越。章泽天肩颈线优越。章泽天双臂纤细。章泽天仪态端正。女团aespa亮...
- Aespa舞台暴露身高比例,宁艺卓脸大,柳智敏有“TOP”相
-
作为SM公司最新女团aespa,初舞台《BlackMamba》公开,在初舞台里,看得出来SM公司是下了大功夫的,虽然之前SM公司新出的女团都有很长的先导片,但是aespa显然是有“特殊待遇”。运用了...
- AESPA女团成员柳智敏karina大美女
-
真队内速度最快最火达成队内首个且唯一两百万点赞五代男女团中输断层第一(图转自微博)...
- 对来学校演出的女团成员语言性骚扰?韩国这所男高的学生恶心透了
-
哕了……本月4日,景福男子高中相关人士称已经找到了在SNS中上传对aespa成员进行性骚扰文章的学生,并开始着手调查。2日,SM娱乐创始人李秀满的母校——景福高中迎来了建校101周年庆典活动。当天,S...
- 一周热门
- 最近发表
-
- SM小分队Girls on Top,女神战队少了f(x)?
- 韩国女团 aespa 首场 VR 演唱会或暗示 Quest 3 将于 10 月推出
- 韩网热议!女团aespa成员Giselle在长腿爱豆中真的是legend
- 假唱而被骂爆的女团:IVE、NewJeans、aespa上榜
- 新女团Aespa登时尚大片 四个少女四种style
- 韩国女团aespa新歌MV曝光 画面梦幻造型超美
- 女网友向拳头维权,自称是萨勒芬妮的原型?某韩国女团抄袭KDA
- 人气TOP女团是?INS粉丝数见分晓;TWICE成员为何在演唱会落泪?
- 韩国女团MVaespa Drama MV_韩国女团穿超短裙子跳舞
- aespa师妹团今年将出道! SM职员亲口曝「新女团风格、人数」
- 标签列表
-
- 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)
