suds用法_soap是不可数名词吗

suds用法_soap是不可数名词吗http://www.cnblogs.com/Tommy-Yu/p/5567091.html

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

转载  于 http://www.cnblogs.com/Tommy-Yu/p/5567091.html

1. 查看服务接口

import suds
client=suds.client.Client('xxxx_webservice_url')
def get_all_methods(client):
    return [method for method in client.wsdl.services[0].ports[0].methods]

Jetbrains全家桶1年46,售后保障稳定

 

2. 查看某个具体接口的传输参数及类型

def get_method_args(client, method_name):
    method = client.wsdl.services[0].ports[0].methods[method_name]
    input_params = method.binding.input
    return input_params.param_defs(method)

 

3. 调用接口服务

client.service.xxx_function(....)

 

4. 关于调试

输出之前调用服务接口时发送了什么soap报文,以及收到什么样的soap报文

print 'last sent:\n', client.last_sent()
print 'last recv:\n', client.last_received()

 当服务器返回报文格式不规范时(非wsdl中定义的),client.last_received()为None。这个时候显然对联调极为不利。

 那就利用suds自身的日志记录看看咯。设定如下:

import sys
import logging
logger = logging.getLogger('suds')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler(sys.stdout))

如果只关心传输了什么,则可以限定logger为“suds.transport.http“

import sys
logger = logging.getLogger('suds.transport.http')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler(sys.stdout))

 5. 异常的捕捉和输出

try:
    client.service.xxx_func(*args, **kwargs)
except suds.WebFault,ex:
    print ex.fault        
    print ex.document

 

 

 

后记:对于第三方库莫名其妙的问题,果断及时拿源码过来剖析(至少debug)

 

DEMO

 来个demo说明如何运用,如下:

复制代码

>>> import suds
>>> url='http://www.gpsso.com/webservice/kuaidi/kuaidi.asmx?wsdl'
>>> client = suds.client.Client(url)
>>> print get_all_methods(client)
[KuaidiQuery]
>>> print get_method_args(client, 'KuaidiQuery')
[(Compay, <Element:0x7f6c55bc43d0 name="Compay" type="(u'string', u'http://www.w3.org/2001/XMLSchema')" />), (OrderNo, <Element:0x7f6c55bc4450 name="OrderNo" type="(u'string', u'http://www.w3.org/2001/XMLSchema')" />)]
>>> print client.service.KuaidiQuery(Company='EMS', OrderNo='1111')
(KuaidiQueryResult){
   API = 
      (API){
         RESULTS = "0"
         MESSAGE = "接口查询成功"
      }
 }
>>> print client.last_sent()
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://gpsso.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <ns0:Body>
      <ns1:KuaidiQuery>
         <ns1:OrderNo>1111</ns1:OrderNo>
      </ns1:KuaidiQuery>
   </ns0:Body>
</SOAP-ENV:Envelope>
>>> print client.last_received()
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope>
   <soap:Body>
      <KuaidiQueryResponse xmlns="http://gpsso.com/">
         <KuaidiQueryResult>
            <API>
               <RESULTS>0</RESULTS>
               <MESSAGE>接口查询成功</MESSAGE>
            </API>
         </KuaidiQueryResult>
      </KuaidiQueryResponse>
   </soap:Body>
</soap:Envelope>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/215897.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • flutter自定义弹窗_app加弹窗

    flutter自定义弹窗_app加弹窗一.Fluttertoast库配置,可参考fluttertoast配置引用1.在pubspec.yaml中配置fluttertoast库,通过Pubget获取fluttertoast的版本,通过Pubupgrade更新,eg:#ThefollowingaddstheCupertinoIconsfonttoyourapplication.#UsewiththeCupertinoIconsclassforiOSstyleicons.cuper

  • Python 二进制,十进制,十六进制转换「建议收藏」

    Python 二进制,十进制,十六进制转换「建议收藏」十六进制到十进制使用int()函数,第一个参数是字符串’0Xff’,第二个参数是说明,这个字符串是几进制的数。 转化的结果是一个十进制数。>>>int(‘0xf’,16) 15二进制到十进制>>>int(‘10100111110′,2)   1342八进制到十进制>>>int(’17’,8)  15其实可以

  • mysql系列:全网最全索引类型汇总「建议收藏」

    mysql系列:全网最全索引类型汇总「建议收藏」前言除了常见的普通索引,唯一索引,组合索引,大家还能说一下mysql中有哪些其他类型的索引吗?今天和大家一起总结mysql中有哪些索引类型。一、mysql中有哪些索引类型?聚簇索引(ClusteredIndex)非聚簇索引主键索引(PRIMARYKEY)辅助索引(SecondaryIndexes)HASH索引BTREE索引T-TREE索引R-Tree索引自适应hash索引(AdaptiveHashIndex)唯一索引(UNIQUEIndexs)普通索引(No

  • c语言之voliate「建议收藏」

    c语言之voliate「建议收藏」volatile:意思:“易变的”特点:1.告诉编译器不做任何优化2.用volatile定义的变量会在程序外被改变,每次使用都要在原始内存地址读取数据,不能被备份缺点:使用过多会降低代码性能使用场合:1.中断服务程序中为其他程序检测的变量,要用volaite2.多任务环境下各个任务间共享的标志,用volatile(操作系统)3.存储器映射的硬件寄存器用vol…

  • Flake8学习

    Flake8学习                 转载: Python静态代码检查工具Flake8   Flake8简介

  • 个人web服务器搭建教程_服务器是干嘛的

    个人web服务器搭建教程_服务器是干嘛的网上资料加自己整理========================一、Apache的配置(已经掌握)  Apache的核心配置文件是“Httpd.conf”,它在电脑中的位置为Apache的安装路径/Conf/,如果安装在C盘的根目录下,则该文件应该在“C:/Apache/Conf/”中,此外,打开Windows的“开始菜单”→“程序”→“ApacheHTTPServ

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号