QNetworkAccessManagerとQtのHTTP認証
-
11-09-2019 - |
質問
私は、有効なユーザ名/パスワードが必要なWebサービスで働いています。 PyQtはから、私は
発するQNetworkAccessManagerを使用してWebサービスにアクセスしていますauthenticationRequired (QNetworkReply*, QAuthenticator*)
認証が必要である(明らかに)、信号。私は、ユーザーとpsswdのために記入した場合 QAuthenticatorは、すべてが正常に動作します。しかし、私は、ユーザーが有効なのないのときにループを分割する方法を見ることができません。
authenticationRequiredのためのドキュメントから:
「それは資格証明書を拒否した場合、この信号は再び放出されます。」
無効な資格情報のために、この信号は再び放射され、そして再びされ、そして 再び...応答でエラーコードを見てみると、このループは、それはエラーで終了するように壊れたり取り扱われることになっている方法は?
0を示しました。解決
Yeh氏は、それは奇妙です。私が以前にやったことは、私はすでに、これらの詳細を認証してきたかどうかを確認し、私はその後、
QNetworkReply.abort()
をコールしている場合であります 他のヒント
何をしようとしておよそます:
QNetworkReply::abort()
または
QNetworkReply::close()
QNetworkReply::abort()
を呼び出すと、エラー「操作中断」の代わりに、元の401エラーで失敗する要求が発生します。今やるべき正しい事はあなたのQAuthenticator::setUser()
スロット内QAuthenticator::setPassword()
またはauthenticationRequired()
を呼び出すことがないように思われます。これは、要求が正しいエラーコードをきれいに終了しますQAuthenticatorPrivate::phase
としてDone
を残すだろう。
Qtのドキュメントは、この時点でかなり明確ではない。
これはQtの4.7での動作もしていないようでした、とQt 4.8でいくつかの時点で導入されました。
、要求は、実際のHTTPコード(例えば、401又は407)で中断されます。
たとえば、あなたはQAuthenticator :: SETUSERとするsetPasswordを呼び出す際に、ユーザーclics OK、彼がキャンセルclicsたときに何を呼び出すことはできません。それがすべてです: - )
このもQNetworkAccessManager ::あなたはQNetworkReplyは::)(中止呼び出す必要はありませんauthenticationRequiredは(、あなたは、単に中止を呼び出すのに対し、あまりにもHTTPコードを保存した、まったくQAuthenticatorメソッドを呼び出すことはできません(&に接続されているスロットにも当てはまります))それを変えるます。