百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

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:要发送的数据,可以是 QByteArraystrbytes

put(request: QNetworkRequest, data: Union[QByteArray, bytes, bytearray])

发起PUT请求。参数:QNetworkRequest:请求对象;data:要发送的数据,可以是 QByteArraystrbytes

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)

设置网络的可访问性,可以设置为
QNetworkAccessManager.Accessible

QNetworkAccessManager.NotAccessible

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)

设置请求的优先级。优先级可以是
QNetworkRequest.HighPriority
, NormalPriority, 或 LowPriority

priority()

获取请求的优先级

setTransferTimeout(timeout: int)

设置请求的传输超时时间(毫秒)

transferTimeout()

获取传输超时时间

KnownHeaders请求头枚举值:

  1. QNetworkRequest.ContentTypeHeader: 设置请求的 Content-Type 头部,用于指明请求体的数据格式。
  2. QNetworkRequest.ContentLengthHeader: 设置请求的 Content-Length 头部,用于指明请求体的长度。
  3. QNetworkRequest.User: 用户定义的头部。
  4. QNetworkRequest.LastModifiedHeader: 设置请求的 Last-Modified 头部,用于指明资源最后一次修改的时间。
  5. QNetworkRequest.DateHeader: 设置请求的 Date 头部,用于指明请求的时间戳。
  6. QNetworkRequest.CacheControlHeader: 设置请求的 Cache-Control 头部,用于控制缓存行为。
  7. QNetworkRequest.ConnectionHeader: 设置请求的 Connection 头部,用于指明连接保持的方式。
  8. QNetworkRequest.KeepAliveHeader: 设置请求的 Keep-Alive 头部,用于维持连接。
  9. QNetworkRequest.AcceptHeader: 设置请求的 Accept 头部,用于指明客户端接受的内容类型。
  10. QNetworkRequest.AcceptCharsetHeader: 设置请求的 Accept-Charset 头部,用于指明客户端接受的字符集。
  11. QNetworkRequest.AcceptEncodingHeader: 设置请求的 Accept-Encoding 头部,用于指明客户端接受的内容编码。
  12. QNetworkRequest.AcceptLanguageHeader: 设置请求的 Accept-Language 头部,用于指明客户端接受的语言。
  13. QNetworkRequest.AuthorizationHeader: 设置请求的 Authorization 头部,用于提供认证信息。
  14. QNetworkRequest.CookieHeader: 设置请求的 Cookie 头部,用于发送客户端的 Cookie 信息。
  15. QNetworkRequest.ExpectHeader: 设置请求的 Expect 头部,用于指明客户端期望的响应行为。
  16. QNetworkRequest.IfMatchHeader: 设置请求的 If-Match 头部,用于条件请求。
  17. QNetworkRequest.IfModifiedSinceHeader: 设置请求的 If-Modified-Since 头部,用于条件请求。
  18. QNetworkRequest.IfNoneMatchHeader: 设置请求的 If-None-Match 头部,用于条件请求。
  19. QNetworkRequest.IfRangeHeader: 设置请求的 If-Range 头部,用于条件请求。
  20. QNetworkRequest.IfUnmodifiedSinceHeader: 设置请求的 If-Unmodified-Since 头部,用于条件请求。
  21. QNetworkRequest.MaxForwardsHeader: 设置请求的 Max-Forwards 头部,用于限制请求的转发次数。
  22. QNetworkRequest.ProxyAuthorizationHeader: 设置请求的 Proxy-Authorization 头部,用于提供代理认证信息。
  23. QNetworkRequest.TEHeader: 设置请求的 TE 头部,用于指明传输编码能力。
  24. QNetworkRequest.UpgradeHeader: 设置请求的 Upgrade 头部,用于指明协议升级请求。
  25. QNetworkRequest.ViaHeader: 设置请求的 Via 头部,用于指明中间节点。
  26. QNetworkRequest.WarningHeader: 设置请求的 Warning 头部,用于传递警告信息。
  27. QNetworkRequest.TransferEncodingHeader: 设置请求的 Transfer-Encoding 头部,用于指明传输编码方式。

Attribute枚举值

  1. HttpStatusCodeAttribute: HTTP 响应的状态码。
  2. RedirectionTargetAttribute: 重定向的目标 URL。
  3. ConnectionEncryptedAttribute: 表示连接是否加密(HTTPS)。
  4. CacheLoadControlAttribute: 控制缓存的加载策略。
  5. CacheSaveControlAttribute: 决定响应是否应该保存到缓存中。
  6. SourceIsFromCacheAttribute: 表示响应是否来自缓存。
  7. 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: 发生的 SSL 错误列表

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...