我怎样才能输出SUDs产生/接收?

我有以下代码:

from suds.client import Client import logging logging.basicConfig(level=logging.INFO) logging.getLogger('suds.client').setLevel(logging.DEBUG) logging.getLogger('suds.transport').setLevel(logging.DEBUG) logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG) logging.getLogger('suds.wsdl').setLevel(logging.DEBUG) SB_PRIVATE_ACCESS = {"PATH":"https://thisurl.com:443/services/",} client = Client(SB_PRIVATE_ACCESS['PATH']) print client 

但我得到500错误。 我试图通过SUD发送和接收XML到wsdl开发者,但是我不知道如何输出它。 我一直在寻找SUD的文档,但似乎无法find它:/有谁知道如何输出发送和接收的原始XML?

SUDS提供了一些便利的方法来做到这一点:

  client.last_sent() client.last_received() 

这些应该为你提供你所需要的。 我用它们进行错误logging。 Client类的API文档应该有你需要的任何额外的信息。

你可以使用MessagePlugin来做到这一点(这将工作在最新的Jurko叉,其中last_sent和last_received已被删除)

 from suds.plugin import MessagePlugin class LogPlugin(MessagePlugin): def sending(self, context): print(str(context.envelope)) def received(self, context): print(str(context.reply)) client = Client("http://localhost/wsdl.wsdl", plugins=[LogPlugin()]) 

Suds支持内部日志logging,就像你一直在做的那样。

我正在设置像你这样的信息级别:

 logging.getLogger('suds.client').setLevel(logging.DEBUG) logging.getLogger('suds.transport').setLevel(logging.DEBUG) # MUST BE THIS? logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG) logging.getLogger('suds.wsdl').setLevel(logging.DEBUG) logging.getLogger('suds.resolver').setLevel(logging.DEBUG) logging.getLogger('suds.xsd.query').setLevel(logging.DEBUG) logging.getLogger('suds.xsd.basic').setLevel(logging.DEBUG) logging.getLogger('suds.binding.marshaller').setLevel(logging.DEBUG) 

而且我也有时需要覆盖根logging器日志级别,这取决于在Suds调用(Django,Plone)下使用的框架。 如果根logging器具有较高的日志logging阈值,则日志messaegs可能永远不会出现(不知道logging器层次结构应如何去除)。 下面是一个如何覆盖的例子:

 def enableDebugLog(self): """ Enable context.plone_log() output from Python scripts """ import sys, logging logger = logging.getLogger() logger.root.setLevel(logging.DEBUG) logger.root.addHandler(logging.StreamHandler(sys.stdout)) 

为了只得到生成的消息,这也是可行的:

 from suds.client import Client import sys SB_PRIVATE_ACCESS = {"PATH":"https://thisurl.com:443/services/",} client = Client(SB_PRIVATE_ACCESS['PATH']) client.set_options(nosend=True) resp = ...<invoke client here>... sys.stdout.buffer.write(resp.envelope) 

尝试改变

 logging.basicConfig(level=logging.INFO) 

 logging.basicConfig(filename="/tmp/suds.log", level=logging.DEBUG) 

如果你想减lessjurko-suds的伐木

  logging.basicConfig(level=logging.INFO) logging.getLogger('suds.client').setLevel(logging.INFO) logging.getLogger('suds.transport').setLevel(logging.INFO) logging.getLogger('suds.xsd.schema').setLevel(logging.INFO) logging.getLogger('suds.wsdl').setLevel(logging.INFO) logging.getLogger('suds.resolver').setLevel(logging.INFO) logging.getLogger('suds.xsd.query').setLevel(logging.INFO) logging.getLogger('suds.xsd.sxbasic').setLevel(logging.INFO) logging.getLogger('suds.xsd.sxbase').setLevel(logging.INFO) logging.getLogger('suds.metrics').setLevel(logging.INFO) logging.getLogger('suds.binding.marshaller').setLevel(logging.INFO)