• python使用SUDS调用webservice


      最近做接口对接,遇到了.net开发的webservice接口,因为python第一次与webservice对接,连问带查,最后使用suds库来实现了

    1.安装suds

      mac: sudo pip install suds

      linux: easy_install suds

      也可以通过去官网下载suds代码,再本地安装

    2. 引用初始化

     1 >>> from suds.client import Client
     2 >>> url = 'http://www.gpsso.com/webservice/kuaidi/kuaidi.asmx?wsdl'
     3 >>> client = Client(url)
     4 >>> print client
     5 
     6 Suds ( https://fedorahosted.org/suds/ ) version: 0.4 GA build: R699-20100913
     7 
     8 Service ( Kuaidi ) tns="http://gpsso.com/"
     9 Prefixes (1)
    10 ns0 = "http://gpsso.com/"
    11 Ports (2):
    12 (KuaidiSoap)
    13 Methods (1):
    14 KuaidiQuery(xs:string Compay, xs:string OrderNo, )
    15 Types (1):
    16 ApiSoapHeader
    17 (KuaidiSoap12)
    18 Methods (1):
    19 KuaidiQuery(xs:string Compay, xs:string OrderNo, )
    20 Types (1):
    21 ApiSoapHeader
    22 >>>

      对url做一下说明,一般要确认给的wsdl地址是正常模式,地址打开一般为xml格式而有些服务是做成了html模式,这个会导致实例化或者调用方法的时候出现xml解析异常。

    3. 方法调用

      2中的client打印出来就可以知道,该webserviece服务定义了什么方法,方法需要什么参数,声明了什么信息等(如头信息,ApiSoapHeader),方法可以通过client.serviece直接调用

    >>> client.service.KuaidiQuery(Company='EMS', OrderNo='1111')
    (KuaidiQueryResult){
       API =
          (API){
             RESULTS = "0"
             MESSAGE = "接口查询成功"
          }
     }
    >>>

      而声明的头信息,则可以用factory的方式去实例化

    >>> header = client.factory.create('ApiSoapHeader')
    >>> print header
    (ApiSoapHeader){
       APICode = None
       APIKey = None
     }
    >>> header.APICode = '123'
    >>> header.APIKey = 'key123'
    >>> print header
    (ApiSoapHeader){
       APICode = "123"
       APIKey = "key123"
     }
    >>>

      头信息需要用set_options方法设置

    >>>
    >>> client.set_options(soapheaders=[header,])
    >>>

      如果没有描述的头信息,可以通过查阅文档https://fedorahosted.org/suds/wiki/Documentation查询custom soap headers来设置

    4. 在此附上参考朋友的文章http://www.cnblogs.com/Tommy-Yu/p/5567091.html

    转载请注明本文来源:http://www.cnblogs.com/nottobe/p/5718823.html

    谢谢

  • 相关阅读:
    用Rails.5.2+ Vue.js做 vue-todolist app
    vue-router
    Vue.js教程--基础2(事件处理 表单输入绑定
    Vue组件(知识)
    Vue.js教程--基础(实例 模版语法template computed, watch v-if, v-show v-for, 一个组件的v-for.)
    ActiveRecord Nested Atrributes 关联记录,对嵌套属性进行CURD
    (GoRails) 自动侦测用户的时区,使用javascript 的jszt库。
    (GoRails) 如何去掉form输入框头尾的空格;何时用callbacks,gem;
    JQ each
    JQ 更改li 颜色
  • 原文地址:https://www.cnblogs.com/dancesir/p/7927403.html
Copyright © 2020-2023  润新知