我有一个项目会加载一个HTTP页面,解析它,然后根据从第一页收到的数据打开其他页面。
由于Qt的QNetworkAccessManager异步工作,似乎我应该能够通过继续发出HTTP请求一次加载多个页面,然后按照回复的顺序来处理响应将会发生由偶数循环处理。
我在解决如何做到这一点时遇到了一些问题:
首先,我在stackoverflow上的某个地方读到你应该只使用一个QNetworkAccess管理器。我不知道这是不是真的。
问题是我正在连接到单个QNetworkAccess管理器上的已完成插槽。如果我一次做多个请求,我不知道完成的信号响应的请求是什么。我不知道是否有办法检查从信号传递的QNetworkReply对象,以了解响应的响应是什么?或者我应该为每个请求实际使用不同的QNetworkAccessManager吗?
以下是我现在将各种东西链接在一起的示例。但我知道,当我正在做多个请求时,这将不起作用:
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()