2009-08-06 65 views
3

我正在使用一个需要有效用户名/密码的web服务。从PyQt的,我访问使用QNetworkAccessManager发射时(显然),需要认证的使用QNetworkAccessManager进行Qt HTTP身份验证

authenticationRequired (QNetworkReply*, QAuthenticator*) 

信号web服务。当我填写用户和psswd QAuthenticator时,一切正常。但是,我看不到如何打破循环时,用户是而不是有效。

从文档的authenticationRequired:

“如果拒绝证书,该信号再次发出。”

对于无效凭证,此信号再次发射,再次,并且再次 ...查看回复中的错误代码显示0.此循环如何被破坏或处理,以便它以错误终止?

回答

2

是的,这很奇怪。什么我以前做的是检查,如果我已经与那些细节验证,如果我再调用QNetworkReply.abort()

1

关于尝试什么:

QNetworkReply::abort() 

QNetworkReply::close() 

0

调用QNetworkReply::abort()将导致请求失败,并显示错误“Operation Aborted”,而不是原来的401错误。现在要做的正确的事情似乎不是在authenticationRequired()插槽中呼叫QAuthenticator::setUser()QAuthenticator::setPassword()。这将使QAuthenticatorPrivate::phaseDone,这将导致请求用正确的错误代码干净地终止。

Qt文档在这一点上还不太清楚。

这似乎并不是Qt 4.7中的行为,而是在Qt 4.8中的某个时候引入的。

0

如果您从连接到&的插槽返回QNetworkAccessManager :: proxyAuthenticationRequired而不调用任何QAuthenticator方法,则请求将以真正的HTTP代码(例如401或407)中止。

例如,当用户点击取消时,您可以调用QAuthenticator :: setUser和setPassword,当用户点击确定并调用任何东西时。这就是全部:-)

对于连接到&的插槽也是如此QNetworkAccessManager :: authenticationRequired(您不必调用QNetworkReply :: abort(),您可以简单地调用任何QAuthenticator方法,从而保留HTTP代码也是,而调用abort()改变它)。