zeepを用いたSOAP API利用を試す
ハロートナミです。元気ではありません
今回はzeepというpythonライブラリを用いてSOAP API通信を試そうというアレです。
チュートリアルいっぱい転がってるけど日本語のエントリが全然ヒットしなかったんで折角だし書くか~みたいなね。基礎だけ
頼れるオタクの頼れる情報。
SOAP APIは使うの難しいのでライブラリ使って楽しようねという話
使う
公式ドキュメントに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を出力するとか、そういうデバッグの手段がよく分からなくて終わっちゃった。
多分あると思うんだけどなあ。わざわざ通信監視する程のやる気も出ず終了。誰かやり方教えて下さい。