3

我正在使用需要有效用户名/密码的网络服务。从 PyQt,我使用 QNetworkAccessManager 访问 web 服务,它发出

authenticationRequired (QNetworkReply*, QAuthenticator*)

当(显然)需要身份验证时发出信号。当我为 QAuthenticator 填写用户和 psswd 时,一切正常。但是,当用户无效时,我看不到如何中断循环。

来自 authenticationRequired 的文档:

“如果它拒绝凭据,则将再次发出此信号。”

对于无效凭据,此信号会一次又一次地发出……查看回复中的错误代码显示为 0。应该如何破坏或处理此循环以使其因错误而终止?

4

4 回答 4

2

是的,很奇怪。我之前所做的是检查我是否已经使用这些详细信息进行了身份验证,然后我是否调用了QNetworkReply.abort()

于 2009-08-06T15:33:17.413 回答
1

试试呢:

QNetworkReply::abort()

或者

QNetworkReply::close()

?

于 2009-08-06T15:38:27.933 回答
0

调用QNetworkReply::abort()将导致请求失败,并出现错误“操作中止”,而不是原来的 401 错误。现在要做的正确的事情似乎是不要打电话QAuthenticator::setUser()QAuthenticator::setPassword()在你的authenticationRequired()插槽内。这将留下QAuthenticatorPrivate::phaseasDone这将导致请求以正确的错误代码干净地终止。

Qt 文档在这一点上相当不清楚。

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

于 2014-12-11T18:37:01.677 回答
0

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

例如,您可以在用户单击 OK 时调用 QAuthenticator::setUser 和 setPassword,而在用户单击 Cancel 时不调用任何内容。就这样 :-)

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

于 2015-09-05T17:57:41.807 回答