如果我有一些错误的授权数据(例如错误的密码),SUDS上升异常(400, u'Bad Request')
我无法获得任何东西,但是在日志中是响应,其中包含密码错误的数据,但是如何获取这个回应?我试过这样:
except Exception as e:
print str(e)
print self._client.last_received()
打印:
(400, u'Bad Request')
None
但是在日志中有一个长xml,其中包含<SOAP-ENV:Reason><SOAP-ENV:Text xml:lang="en">Sender not authorized</SOAP-ENV:Text></SOAP-ENV:Reason>
答案 0 :(得分:2)
由于代码阻止,我将其从评论中删除并回答答案。
import suds.client
try:
auth_url = "https://url.to.my.service/authenticator?wsdl"
auth_client = suds.client.Client(auth_url)
cookie = auth_client.service.authenticate(user,password)
except Exception as e:
print str(e)
print auth_client.last_received()
使用此代码,如果我传递了无效密码,我会从服务中收到相应的回复:
Server raised fault: 'error.pwd.incorrect'
None
如果我传递了无效的用户ID,则为适当的响应:
Server raised fault: 'error.uid.missing'
None
您可能要考虑做的事情是将except
语句更改为捕获suds.WebFault
而不是通用异常。可能还有其他事情正在发生并触发您的异常阻止。
可能对您的问题有帮助的另一件事是在您的Client()
电话中传递faults=True
。
可以将客户端配置为将Web故障作为WebFault或 返回一个元组(,)
我上面发布的代码如下所示:
auth_client = suds.client.Client(auth_url, faults=True)