alf*_*edo 46 python xml soap 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
Run Code Online (Sandbox Code Playgroud)
但我得到了500个错误.我试图通过SUD将生成和接收的XML发送给wsdl开发人员,但我无法想出如何输出它?我一直在查看SUD的文档,但似乎无法找到它:/有谁知道如何输出发送和接收的原始xml?
oll*_*_uk 72
SUDS提供了一些方便的方法:
client.last_sent()
client.last_received()
Run Code Online (Sandbox Code Playgroud)
这些应该为您提供所需的一切.我用它们进行错误记录. Client类的API文档应该包含您需要的任何额外信息.
Dam*_*ian 19
您可以使用MessagePlugin执行此操作(这将适用于已删除last_sent和last_received的较新Jurko fork)
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()])
Run Code Online (Sandbox Code Playgroud)
Mik*_*maa 13
正如您所做的那样,Suds支持内部日志记录.
我正在设置像你这样的信息级别:
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)
Run Code Online (Sandbox Code Playgroud)
我有时还需要覆盖根记录器日志记录级别,具体取决于在Suds调用(Django,Plone)下使用的框架.如果根记录器具有更高的日志记录阈值,则可能永远不会出现日志标记(不确定记录器层次结构应该如何).以下是如何覆盖的示例:
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))
Run Code Online (Sandbox Code Playgroud)
要仅获取生成的消息,这也有效:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35598 次 |
| 最近记录: |