我正在尝试在python库zeep的帮助下使用wsdl。它工作正常,但我无法找到如何从请求中获取数据。
我的代码:
# encoding=utf-8
from requests.auth import HTTPBasicAuth # or HTTPDigestAuth, or OAuth1, etc.
from zeep import Client
from zeep import helpers
from zeep.transports import Transport
import logging.config
logging.config.dictConfig({
'version': 1,
'formatters': {
'verbose': {
'format': '%(name)s: %(message)s'
}
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
},
'loggers': {
'zeep.transports': {
'level': 'DEBUG',
'propagate': True,
'handlers': ['console'],
},
}
})
wsdl = 'wsdl_url'
user = 'login'
password = 'password'
my_transport = Transport(http_auth=HTTPBasicAuth(user, password))
client = Client(
wsdl, transport=my_transport
)
result = client.service.FunctionName(...)
print result
结果,我得到了这个:
{
'schema': <Schema(location=None)>,
'_value_1': <Element {urn:schemas-microsoft-com:xml-diffgram- v1}diffgram at 0x104ec0098>
}
显然,这不是我想要的。感谢日志记录,我可以看到,实际上我通过信封获得了所需的信息:
我的问题是,如何访问信封内的数据(我需要rowOrders,部分显示在屏幕上)
答案 0 :(得分:2)
我也遇到了同样的问题。所以这就是我做到的。这不是最好的方法,但它可以是一个开始,我希望制造商原谅我。 另外,我刚开始学习python。
克隆zeep项目: https://github.com/mvantellingen/python-zeep 并转到该文件夹。
在transports.py中,在构造函数中添加此行(_ init _):
var db = monk('103.196.212.147:27017', {
username : 'app_staging',
password : 'jimmy@16'
});
然后在方法post中,在返回响应之前,添加以下行:
self.response = ''
之后,通过执行
来构建包self.response = response
这应该在你的virtualenv中(如果你使用的话)
所以在您的代码中,您可以打印
python setup.py install
希望这会有所帮助
答案 1 :(得分:2)
使用Zeep版本2.4.0我能够通过将raw_response选项传递给客户端来获得原始响应。这告诉客户端返回Requests响应对象。
这是示例代码:
from zeep import Client
wsdl = 'wsdl_url'
client = Client(wsdl)
with client.options(raw_response=True):
soap_result = client.service.function_name(...)
# Print out text from Requests response object returned
print soap_result.text