Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QNetworkAccessManager的Qt HTTP身份验证_Python_Qt_Networking_Qt4_Pyqt - Fatal编程技术网

Python QNetworkAccessManager的Qt HTTP身份验证

Python QNetworkAccessManager的Qt HTTP身份验证,python,qt,networking,qt4,pyqt,Python,Qt,Networking,Qt4,Pyqt,我正在使用一个需要有效用户名/密码的Web服务。在PyQt中,我使用发出 authenticationRequired (QNetworkReply*, QAuthenticator*) 当(显然)需要身份验证时发出信号。当我填写用户和psswd时 QAuthenticator,一切正常。但是,当用户无效时,我看不出如何打破循环 从需要进行身份验证的文档中: 如果拒绝凭据,此信号将再次发出 对于无效凭证,此信号会一次又一次发出,并且 再一次。。。查看回复中的错误代码显示0。这个循环应该如何被打

我正在使用一个需要有效用户名/密码的Web服务。在PyQt中,我使用发出

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

从需要进行身份验证的文档中:

如果拒绝凭据,此信号将再次发出

对于无效凭证,此信号会一次又一次发出,并且
再一次。。。查看回复中的错误代码显示0。这个循环应该如何被打破或处理,从而以错误终止?

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

QNetworkReply::abort()


调用
QNetworkReply::abort()
将导致请求失败,错误为“操作已中止”,而不是原来的401错误。现在要做的正确的事情似乎不是在
authenticationRequired()插槽中调用
QAuthenticator::setUser()
QAuthenticator::setPassword()
。这将使
QAuthenticatorPrivate::phase
保持为
Done
,这将导致请求以正确的错误代码完全终止

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


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

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

例如,当用户clics确定时,您可以调用QAuthenticator::setUser和setPassword;当用户clics取消时,您可以不调用任何内容。仅此而已:-)

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

QNetworkReply::close()