Question

Je travaille avec un webservice qui nécessite un nom d'utilisateur valide / mot de passe. De PyQt, j'accède au service Web à l'aide QNetworkAccessManager qui émet le

authenticationRequired (QNetworkReply*, QAuthenticator*)
signal lorsque (évidemment)

, l'authentification est nécessaire. Lorsque je remplis l'utilisateur et PASSWORD pour QAuthenticator, tout fonctionne bien. Cependant, je ne vois pas comment briser la boucle lorsque l'utilisateur est pas valide.

De la documentation pour authenticationRequired:

« Si elle rejette les informations d'identification, ce signal sera émis à nouveau. »

Pour des informations d'identification valides ce signal est émis à nouveau, et encore, et à nouveau ... En regardant le code d'erreur dans la réponse a montré 0. Comment est cette boucle censé être cassé ou manipulés de manière à ce qu'il se termine par une erreur?

Était-ce utile?

La solution

Yeh, il est étrange. Ce que je l'ai fait précédemment est vérifier si je l'ai déjà authentifié avec ces détails et si je puis appeler QNetworkReply.abort()

Autres conseils

Qu'en est-il essayer:

QNetworkReply::abort()

ou

QNetworkReply::close()

L'appel QNetworkReply::abort() fera la demande à l'échec avec l'erreur « Opération Aborted » au lieu de l'erreur 401 d'origine. La bonne chose à faire semble maintenant être de ne pas appeler QAuthenticator::setUser() ou QAuthenticator::setPassword() dans votre logement pour authenticationRequired(). Cela laissera le QAuthenticatorPrivate::phase comme Done qui provoquera la demande de mettre fin à proprement avec le code d'erreur correct.

La documentation Qt est assez claire sur ce point.

Cela ne semble pas être le comportement dans Qt 4.7, et a été introduit à un moment donné dans Qt 4.8.

Si vous revenez d'une fente reliée à & QNetworkAccessManager :: proxyAuthenticationRequired sans faire appel à toute méthode QAuthenticator, la demande sera annulée avec le code réel HTTP (par exemple 401 ou 407).

Par exemple, vous pouvez appeler QAuthenticator :: setUser et setPassword lorsque les utilisateurs OK clics et rien appeler quand il CLICS Annuler. C'est tout: -)

Ceci est également vrai pour les emplacements connectés à & QNetworkAccessManager :: authenticationRequired (où vous ne devez pas appeler QNetworkReply :: abort (), vous pouvez simplement appeler aucune méthode de QAuthenticator du tout, qui conservent le code HTTP aussi, alors appelant abort ( ) le modifier).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top