13 from PyQt4.QtNetwork import QNetworkRequest |
13 from PyQt4.QtNetwork import QNetworkRequest |
14 |
14 |
15 |
15 |
16 class FollowRedirectReply(QObject): |
16 class FollowRedirectReply(QObject): |
17 """ |
17 """ |
18 Class implementing a network reply delegate allowing to check redirects |
18 Class implementing a network reply delegate allowing to check redirects. |
19 """ |
19 """ |
20 finished = pyqtSignal() |
20 finished = pyqtSignal() |
21 |
21 |
22 def __init__(self, url, manager, maxRedirects=5): |
22 def __init__(self, url, manager, maxRedirects=5): |
23 """ |
23 """ |
24 Constructor |
24 Constructor |
25 |
25 |
26 @param url URL to get (QUrl) |
26 @param url URL to get (QUrl) |
27 @param manager reference to the network access manager (QNetworkAccessManager) |
27 @param manager reference to the network access manager |
|
28 (QNetworkAccessManager) |
28 @keyparam maxRedirects maximum allowed redirects (integer) |
29 @keyparam maxRedirects maximum allowed redirects (integer) |
29 """ |
30 """ |
30 super(FollowRedirectReply, self).__init__() |
31 super(FollowRedirectReply, self).__init__() |
31 |
32 |
32 self.__manager = manager |
33 self.__manager = manager |
92 |
93 |
93 def __replyFinished(self): |
94 def __replyFinished(self): |
94 """ |
95 """ |
95 Private slot handling the receipt of the requested data. |
96 Private slot handling the receipt of the requested data. |
96 """ |
97 """ |
97 replyStatus = self.__reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) |
98 replyStatus = self.__reply.attribute( |
|
99 QNetworkRequest.HttpStatusCodeAttribute) |
98 if (replyStatus != 301 and replyStatus != 302) or \ |
100 if (replyStatus != 301 and replyStatus != 302) or \ |
99 self.__redirectCount == self.__maxRedirects: |
101 self.__redirectCount == self.__maxRedirects: |
100 self.finished.emit() |
102 self.finished.emit() |
101 return |
103 return |
102 |
104 |
103 self.__redirectCount += 1 |
105 self.__redirectCount += 1 |
104 |
106 |
105 redirectUrl = self.__reply.attribute(QNetworkRequest.RedirectionTargetAttribute) |
107 redirectUrl = self.__reply.attribute( |
|
108 QNetworkRequest.RedirectionTargetAttribute) |
106 self.__reply.close() |
109 self.__reply.close() |
107 ## self.__reply.finished[()].disconnect(self.__replyFinished) |
|
108 self.__reply.deleteLater() |
110 self.__reply.deleteLater() |
109 self.__reply = None |
111 self.__reply = None |
110 |
112 |
111 self.__reply = self.__manager.get(QNetworkRequest(redirectUrl)) |
113 self.__reply = self.__manager.get(QNetworkRequest(redirectUrl)) |
112 self.__reply.finished[()].connect(self.__replyFinished) |
114 self.__reply.finished[()].connect(self.__replyFinished) |