authenticationRequired (QNetworkReply*, QAuthenticator*)
当需要认证时,发出信号。当我为QAuthenticator填写用户和密码时,一切正常。然而,我不知道如何在用户无效时中断循环。
从authenticationRequired的文档中可以看到:
"如果拒绝凭据,此信号将再次发出。"
对于无效凭据,此信号会一遍又一遍地发出...查看响应中的错误代码显示为0。该循环应该如何被打破或处理,以便以错误终止?
authenticationRequired (QNetworkReply*, QAuthenticator*)
当需要认证时,发出信号。当我为QAuthenticator填写用户和密码时,一切正常。然而,我不知道如何在用户无效时中断循环。
从authenticationRequired的文档中可以看到:
"如果拒绝凭据,此信号将再次发出。"
对于无效凭据,此信号会一遍又一遍地发出...查看响应中的错误代码显示为0。该循环应该如何被打破或处理,以便以错误终止?
是的,这很奇怪。我之前做的是检查是否已经使用这些详细信息进行了身份验证,如果是,则调用QNetworkReply.abort()
你可以尝试一下:
QNetworkReply::abort()
或者
QNetworkReply::close()
?
调用QNetworkReply::abort()
将导致请求失败,并显示错误“操作已中止”,而不是原始的401错误。现在正确的做法似乎是不要在您的authenticationRequired()
槽内调用QAuthenticator::setUser()
或QAuthenticator::setPassword()
。这将使QAuthenticatorPrivate::phase
保持为Done
,从而使请求以正确的错误代码干净地终止。
Qt文档在这一点上相当不清楚。
这似乎不是Qt 4.7中的行为,而是在Qt 4.8的某个时候引入的。
如果您从连接到&QNetworkAccessManager :: proxyAuthenticationRequired的插槽返回而没有调用任何QAuthenticator方法,则请求将被中止并显示真实的HTTP代码(例如401或407)。
例如,当用户单击“确定”时,可以调用QAuthenticator :: setUser和setPassword,而单击“取消”时则不调用任何内容。就这样:-)
对于连接到&QNetworkAccessManager :: authenticationRequired的插槽也是如此(在这种情况下,您无需调用QNetworkReply :: abort(),只需根本不调用任何QAuthenticator方法即可保留HTTP代码,而调用abort()会更改它)。