Frage

Ich arbeite mit einem Webservice, die einen gültigen Benutzernamen / Passwort erfordert. Von PyQt, ich Zugriff auf den Webservice QNetworkAccessManager verwendet, die die

aussendet
authenticationRequired (QNetworkReply*, QAuthenticator*)

Signal, wenn (offensichtlich), Authentifizierung erforderlich ist. Wenn ich dazu einfach den Benutzer und psswd für QAuthenticator, funktioniert alles einwandfrei. Allerdings kann ich nicht sehen, wie die Schleife zu unterbrechen, wenn der Benutzer nicht gültig.

Von der Dokumentation für authenticationRequired:

„Wenn es um die Anmeldeinformationen ablehnt, wird dieses Signal wieder ausgegeben werden.“

Für ungültige Anmeldeinformationen dieses Signal wieder emittiert wird, und wieder, und wieder ... Mit Blick auf dem Fehlercode in der Antwort zeigte 0. Wie diese Schleife gebrochen werden sollte oder gehandhabt, so dass es mit einem Fehler beendet?

War es hilfreich?

Lösung

Yeh, es ist seltsam. Was ich Check vorher getan, wenn ich bereits mit diesen Details authentifiziert haben und wenn ich dann QNetworkReply.abort() nennen

Andere Tipps

Was zu versuchen:

QNetworkReply::abort()

oder

QNetworkReply::close()

Beim QNetworkReply::abort() bewirkt, dass die Anforderung mit dem Fehler ‚Operation Aborted‘ zum Scheitern verurteilt statt der ursprünglichen 401-Fehler. Die richtige Sache zu tun scheint jetzt zu sein, nicht QAuthenticator::setUser() oder QAuthenticator::setPassword() in Ihrem authenticationRequired() Schlitz zu nennen. Dies wird den QAuthenticatorPrivate::phase als Done verlassen, die die Anforderung mit dem richtigen Fehlercode zu beenden sauber führen werden.

Die Qt-Dokumentation ist ziemlich unklar, zu diesem Punkt.

Dies schien nicht das Verhalten in Qt 4.7, zu sein, und wurde an einem gewissen Punkt in Qt 4.8 eingeführt.

Wenn Sie von einem Schlitz zurückkehren verbunden & QNetworkAccessManager :: proxyAuthenticationRequired ohne jede QAuthenticator Methode aufrufen, wird die Anforderung mit echten HTTP-Code abgebrochen werden (zum Beispiel 401 oder 407).

Zum Beispiel können Sie QAuthenticator rufen :: setUser und setPassword, wenn der Benutzer clics OK und nichts an, wenn er Abbrechen CLICS. Das ist alles: -)

Dies gilt auch für die Schlitze mit & QNetworkAccessManager :: authenticationRequired (wo Sie müssen QNetworkReply nicht aufrufen :: abbrechen (), können Sie einfach überhaupt keine QAuthenticator Methode aufrufen, die zu HTTP-Code erhalten, während Aufruf abbrechen ( ändern) it).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top