当您在QtNetwork中执行多个请求时,如何识别发出QNetworkReply完成信号的请求?
我有一个项目将加载一个HTTP页面,解析它,然后根据从第一个页面接收到的数据打开其他页面 由于Qt的QNetworkAccessManager是异步工作的,因此我似乎可以通过继续发出HTTP请求一次加载多个页面,然后按照回复返回的顺序处理响应,并由偶数循环处理 不过,我在想如何做到这一点时遇到了一些问题: 首先,我在stackoverflow的某个地方读到,您应该只使用一个QNetworkAccess管理器。我不知道这是不是真的 问题是我正在连接到单个QNetworkAccess管理器上的已完成插槽。如果我一次执行多个请求,我不知道完成的信号响应的是什么请求。我不知道是否有方法检查从信号传递的QNetworkReply对象,以了解它响应的是什么应答?或者我应该为每个请求使用不同的QNetworkAccessManager吗 下面是一个我现在如何把东西链接在一起的例子。但我知道,当我同时处理多个请求时,这是行不通的:当您在QtNetwork中执行多个请求时,如何识别发出QNetworkReply完成信号的请求?,qt,http,qnetworkaccessmanager,Qt,Http,Qnetworkaccessmanager,我有一个项目将加载一个HTTP页面,解析它,然后根据从第一个页面接收到的数据打开其他页面 由于Qt的QNetworkAccessManager是异步工作的,因此我似乎可以通过继续发出HTTP请求一次加载多个页面,然后按照回复返回的顺序处理响应,并由偶数循环处理 不过,我在想如何做到这一点时遇到了一些问题: 首先,我在stackoverflow的某个地方读到,您应该只使用一个QNetworkAccess管理器。我不知道这是不是真的 问题是我正在连接到单个QNetworkAccess管理器上的已完成
from PyQt4 import QtCore,QtGui,QtNetwork
class Example(QtCore.QObject):
def __init__(self):
super().__init__()
self.QNetworkAccessManager_1 = QtNetwork.QNetworkAccessManager()
self.QNetworkCookieJar_1 = QtNetwork.QNetworkCookieJar()
self.QNetworkAccessManager_1.setCookieJar(self.QNetworkCookieJar_1)
self.app = QtGui.QApplication([])
def start_request(self):
QUrl_1 = QtCore.QUrl('https://erikbandersen.com/')
QNetworkRequest_1 = QtNetwork.QNetworkRequest(QUrl_1)
#
self.QNetworkAccessManager_1.finished.connect(self.someurl_finshed)
self.QNetworkAccessManager_1.get(QNetworkRequest_1)
def someurl_finshed(self, NetworkReply):
# I do this so that this function won't get called for a diffent request
# But it will only work if I'm doing one request at a time
self.QNetworkAccessManager_1.finished.disconnect(self.someurl_finshed)
page = bytes(NetworkReply.readAll())
# Do something with it
print(page)
QUrl_1 = QtCore.QUrl('https://erikbandersen.com/ipv6/')
QNetworkRequest_1 = QtNetwork.QNetworkRequest(QUrl_1)
#
self.QNetworkAccessManager_1.finished.connect(self.someurl2_finshed)
self.QNetworkAccessManager_1.get(QNetworkRequest_1)
def someurl2_finshed(self, NetworkReply):
page = bytes(NetworkReply.readAll())
# Do something with it
print(page)
kls = Example()
kls.start_request()
我不熟悉PyQt,但从一般Qt编程的角度来看
- 仅使用一个QNetworkAccessManager是正确的设计选择
- 信号提供了
,我们可以使用它来识别相应的请求QNetworkReply*
是一个C++示例,同样的。
GET()(和()等)也返回相应的QNETWrWorkRead,因此如果需要的话,可以直接连接到它的FixSee()信号。