与QNetworkAccessManager Qt的HTTP认证
-
11-09-2019 - |
题
我正在与这需要一个有效的用户名/密码,一个web服务的工作。从PyQt的,我访问使用QNetworkAccessManager发射的
的web服务authenticationRequired (QNetworkReply*, QAuthenticator*)
当(明显),需要信号验证。当我填写用户和psswd为 QAuthenticator,一切工作正常。然而,我不能看到如何当用户中断环路的不的有效。
从文档为authenticationRequired:
“如果它拒绝该凭证,该信号将被再次发射。”
有关无效凭证此信号再次发射,并且再次,与 再次...在答复中的错误代码,寻找显示0。这环路应该是怎样被打破或处理,使其以一个错误终止?
解决方案
叶,它是奇数。什么我以前做的是检查,如果我已经与那些细节验证,如果我再调用QNetworkReply.abort()
其他提示
关于尝试什么:
QNetworkReply::abort()
或
QNetworkReply::close()
调用QNetworkReply::abort()
将导致请求失败并返回错误“操作已中止”而不是原来的401错误。现在要做的正确的事似乎不叫QAuthenticator::setUser()
或QAuthenticator::setPassword()
您authenticationRequired()
槽内。这将使QAuthenticatorPrivate::phase
如Done
这将导致请求与正确的错误代码干净地终止。
Qt文档是在这一点上非常不清楚。
这似乎并没有在Qt的4.7的行为,并且在某些时候在Qt的4.8中引入的。
如果你从连接到&QNetworkAccessManager :: proxyAuthenticationRequired而不调用任何QAuthenticator方法的槽返回,该请求将被与实际HTTP代码(例如401或407)中止。
例如,您可以拨打QAuthenticator :: SETUSER和setPassword当用户CLICS OK,并呼吁没事的时候,他CLICS取消。这就是: - )
这也是真实的槽连接到&QNetworkAccessManager :: authenticationRequired(其中你不必调用QNetworkReply ::中止(),则可以简单地调用没有QAuthenticator方法在所有的,其保持HTTP代码,反之,主叫中止( )改变它)。