TonamiLog

ゆるキャン△とスノーボードとオタク

zeepを用いたSOAP API利用を試す

ハロートナミです。元気ではありません

今回はzeepというpythonライブラリを用いてSOAP API通信を試そうというアレです。

チュートリアルいっぱい転がってるけど日本語のエントリが全然ヒットしなかったんで折角だし書くか~みたいなね。基礎だけ

f:id:Thiroyuki:20180830131801p:plain
頼れるオタクの頼れる情報。
SOAP APIは使うの難しいのでライブラリ使って楽しようねという話

インスコ

pip install zeep

はい

使う

公式ドキュメントにsimple use caseとして書いてあったソース

import zeep

wsdl = 'http://www.soapclient.com/xml/soapresponder.wsdl'
client = zeep.Client(wsdl=wsdl)
print(client.service.Method1('Zeep', 'is cool'))
# >Your input parameters are Zeep and is cool

何が起きているか

wsdl(Web Services Description Language)にAPIを利用するためのインターフェースが書いてあるので読み込んでクライアントを作成する。
クライアントを通じてAPIを実行する。だけ

wsdlを通じていい感じのクラス(?)を作成してくれるので、APIを関数のように実行出来るのが嬉しいらしい。
俺は普通にREST APIにしてくれた方が嬉しかった。

認証

今回使おうとしたAPIではWS-Securityとかいうのを使って認証をするらしかった。
WS-Security (WSSE) — Zeep 3.1.0 documentation
めんどくせーなと思ったら用意されているらしかったので試した。やったね

from zeep import Client
from zeep.wsse.username import UsernameToken

wsdl = 'http://www.webservicex.net/ConvertSpeed.asmx?WSDL'
client = Client(wsdl , wsse=UsernameToken('username', 'password'))

ホーン
こんな感じに書いておくと、SOAPのheaderに以下のような感じで内容が出るらしい

        <wsse:Security>
          <wsse:UsernameToken>
            <wsse:Username>username</wsse:Username>
            <wsse:Password Type="wsse:PasswordText">password</wsse:Password>
          </wsse:UsernameToken>
        </wsse:Security>

ホエーン

ドキュメント見る感じではなかなか良かった。これで多分通信も出来る。多分ね
多分というのはどこがおかしいかよくわからんけどエラーで正常なレスポンスが受け取れなかったし
使おうとしたAPIがクソなので「リクエストが不正です」しかエラー返してこなくて何が起きてんのか分からないまま時間切れしたという事です。
なんかこう、実際に通信に載せたxmlを出力するとか、そういうデバッグの手段がよく分からなくて終わっちゃった。
多分あると思うんだけどなあ。わざわざ通信監視する程のやる気も出ず終了。誰かやり方教えて下さい。