2

我正在尝试创建一个使用 WSDL 文件并生成正确 SOAP 消息的客户端。这就是我创建客户端的方式:

client = Client(
        wsdl=wsdl
        ,transport = transport
        ,wsse = Signature('key.pem', 'cert.pem')
    )

zeep 代码中的注释说它应该生成类似于以下内容的 XML:

  <soap:Header>
    <wsse:Security mustUnderstand="true">
      <wsu:Timestamp>
        <wsu:Created>2015-06-25T21:53:25.246276+00:00</wsu:Created>
        <wsu:Expires>2015-06-25T21:58:25.246276+00:00</wsu:Expires>
      </wsu:Timestamp>
    </wsse:Security>
  </soap:Header>

但是它不添加mustUnderstand属性并且TimeStamp是空白的。有谁知道如何确保这些字段设置正确?

4

1 回答 1

4
    从日期时间导入日期时间,时间增量
    从 lxml 导入 etree
    从 zeep 导入客户端
    从 zeep.wsse 导入工具
    从 zeep.plugins 导入 HistoryPlugin

    # Справочники
    wsdl = 'http://claim-test2.isb.az:8903/cib/svc/wsdl/codetable.wsdl'
    用户名、密码 = 'ws'、'********'
    bussines_user = '********'


    类用户名令牌时间戳:
        def __init__(self, username, password=None):
            self.username = 用户名
            self.password = 密码

        def 应用(自我,信封,标题):
            安全 = utils.get_security_header(信封)

            创建 = datetime.now()
            过期=创建+时间增量(秒=5 * 60)

            令牌 = utils.WSSE.UsernameToken()
            令牌.扩展([
                utils.WSSE.Username(self.username),
                utils.WSSE.Password(self.password),
                utils.WSSE.Nonce('43d74dda16a061874d9ff27f2b40e017'),
                utils.WSSE.Created(utils.get_timestamp(created)),
            ])

            时间戳 = utils.WSU('时间戳')
            timestamp.append(utils.WSU('Created', utils.get_timestamp(created)))
            timestamp.append(utils.WSU('Expires', utils.get_timestamp(expired)))

            security.append(时间戳)
            security.append(令牌)

            #  
            # headers['Content-Type'] = 'application/soap+xml;charset=UTF-8'

            回邮信封、信头

        def 验证(自我,信封):
            经过


    历史 = HistoryPlugin()
    客户=客户(
        wsdl=wsdl,
        wsse=UsernameTokenTimestamp(用户名=用户名,密码=密码),
        插件=[历史]
    )

于 2017-11-22T17:31:31.380 回答