我怎样才能输出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)