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
    from datetime import datetime, timedelta
    lxml インポート etree から
    zeepインポートクライアントから
    zeep.wsseインポートユーティリティから
    from zeep.plugins import HistoryPlugin

    # Справочники
    wsdl = 'http://claim-test2.isb.az:8903/cib/svc/wsdl/codetable.wsdl'
    ユーザー名、パスワード = 'ws'、'********'
    bussines_user = '********'


    クラス UsernameTokenTimestamp:
        def __init__(自分、ユーザー名、パスワード=なし):
            self.username = ユーザー名
            self.password = パスワード

        def apply (自己、エンベロープ、ヘッダー):
            セキュリティ = utils.get_security_header (封筒)

            作成された = datetime.now()
            期限切れ = 作成済み + timedelta(秒 = 5 * 60)

            トークン = utils.WSSE.UsernameToken()
            token.extend([
                utils.WSSE.Username(self.username)、
                utils.WSSE.Password(self.password)、
                utils.WSSE.Nonce('43d74dda16a061874d9ff27f2b40e017'),
                utils.WSSE.Created(utils.get_timestamp(作成済み)),
            ]))

            タイムスタンプ = utils.WSU('タイムスタンプ')
            timestamp.append(utils.WSU('Created', utils.get_timestamp(created)))
            timestamp.append(utils.WSU('期限切れ', utils.get_timestamp(期限切れ)))

            security.append(タイムスタンプ)
            security.append(トークン)

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

            返信用封筒、ヘッダー

        def verify (自己、エンベロープ):
            合格


    history = HistoryPlugin()
    クライアント = クライアント(
        wsdl=wsdl,
        wsse=UsernameTokenTimestamp(username=ユーザー名, password=パスワード),
        plugins=[履歴]
    )

于 2017-11-22T17:31:31.380 に答える