SOAPとは
SOAPとは、サーバにある関数をコールするためのプロトコル。
wsdl文書というxmlで書かれた定義ファイルがあり、そこにSOAPサーバ上でコールできるメソッドなどが書かれている。
メソッドの引数の型定義などもmessageタグで書かれている。
wsdlに配置されているタグについての説明は以下が詳しい。
wsdl文書の具体例は以下。
PythonでSOAPサーバにアクセスする
zeep というSOAPクライアントのライブラリがある。
他のSOAPクライアントライブラリとの比較記事は以下。
wsdl文書を一覧する
zeepのcliでwsdl文書を読みやすく一覧できる。
# zeepがインストールされている前提。
$ python -m zeep http://www.soapclient.com/xml/soapresponder.wsdl
Prefixes:
xsd: http://www.w3.org/2001/XMLSchema
ns0: http://www.SoapClient.com/xml/SoapResponder.xsd
Global elements:
Global types:
xsd:anyType
xsd:ENTITIES
xsd:ENTITY
(省略)
Bindings:
Soap11Binding: {http://www.SoapClient.com/xml/SoapResponder.wsdl}SoapResponderBinding
Service: SoapResponder
Port: SoapResponderPortType (Soap11Binding: {http://www.SoapClient.com/xml/SoapResponder.wsdl}SoapResponderBinding)
Operations:
Method1(bstrParam1: xsd:string, bstrParam2: xsd:string) -> bstrReturn: xsd:string
# => Method1という関数があり、2つ文字列型の引数を取る。
SOAPサーバへアクセスする
SOAPサーバへアクセスするコード例は以下。
import zeep
wsdl = 'http://www.soapclient.com/xml/soapresponder.wsdl'
client = zeep.Client(wsdl=wsdl)
# zeepがwsdlを見て、Method1というメソッドを確認し、service経由でMethod1をコールできるようにしている
print(client.service.Method1('hey', 'ya'))
# => 'Your input parameters are hey and ya'
TLS検証があるサーバにアクセスする
TLS検証のあるサーバにアクセスしたい場合は、以下の方法で実現できる。
from requests import Session
from zeep import Client
from zeep.transports import Transport
session = Session()
session.verify = 'path/to/my/certificate.pem'
transport = Transport(session=session)
client = Client(
'http://my.own.sslhost.local/service?WSDL',
transport=transport)
SSLクライアント認証によるアクセス制限があるサーバにアクセスする
もしSSLクライアント認証によるアクセス制限のあるサーバにアクセスしたい場合は、以下の方法で実現できる。
上と似ているが、sessionのオプションであるcert
の指定が増えている。
from requests import Session
from zeep import Client
from zeep.transports import Transport
session = Session()
session.verify = True
session.cert = 'path/to/my/ssl_cient_cert.pem'
transport = Transport(session=session)
client = Client(
'http://my.own.sslhost.local/service?WSDL',
transport=transport)