如何在SUDS中获得错误响应?

时间:2014-07-02 13:23:59

标签: python suds

如果我有一些错误的授权数据(例如错误的密码),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>

1 个答案:

答案 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)