gpt4 book ai didi

python - 配置 suds 以将自定义响应 xml 解析器用于大响应有效负载

转载 作者:太空狗 更新时间:2023-10-30 02:33:01 25 4
gpt4 key购买 nike

我正在构建 python 客户端应用程序以使用 suds python 使用来自 WebService 的数据。现在我可以进行远程调用并获得响应。我的问题是响应大小很大——现在是 100Mb,将来会增加。我已请求 WebService 提供商更新 API,这将允许我请求模型的一部分,但目前运气不佳。

请建议如何将 suds 客户端配置为:

  • 为响应消息使用自定义流解析器——这将仅提取我需要的信息
  • 并避免运行 suds.sax.parser 并且不构建包含整个响应树的 DOM 对象
  • 我还希望我的解析器将响应直接保存到磁盘上的文件中,而不是将其存储在内存中(要实现后者,我认为我需要通过自定义肥皂水传输来为我完成此操作)

最佳答案

对于手头的任务,我找到了部分问题的解决方案 - 我正在使用 suds.plugin.MessagePlugin 实现来清除保存的 WebService 响应负载并防止 suds 将其解析为 DOM。这是我原来问题中的第 2 项:

avoid running suds.sax.parser and do not build DOM object containing whole response tree

这是将此方法用于公共(public) Web 服务的示例。

请参阅 gist 中的完整代码

    import suds
class PayloadInterceptor(suds.plugin.MessagePlugin):
def __init__(self, *args, **kwargs):
self.last_payload = None

def received(self, context):
#recieved xml as a string
print "%s bytes received" % len(context.reply)
self.last_payload = context.reply
#clean up reply to prevent parsing
context.reply = ""
return context

if __name__=='__main__':
wsurl = "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL"
payload_interceptor = PayloadInterceptor()
client = suds.client.Client(wsurl, plugins=[payload_interceptor])
print client
res = client.service.CapitalCity("NL")
print "received %s bytes" % len(payload_interceptor.last_payload)
print "parsed result: %s" % res
print "response payload: %s" % payload_interceptor.last_payload

产生输出:

    ...    
received 336 bytes
parsed result: None
response payload: <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<m:CapitalCityResponse xmlns:m="http://www.oorsprong.org/websamples.countryinfo">
<m:CapitalCityResult>Amsterdam</m:CapitalCityResult>
</m:CapitalCityResponse>
</soap:Body>
</soap:Envelope>

关于python - 配置 suds 以将自定义响应 xml 解析器用于大响应有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com