10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonでSOAPサーバにzeepを使ってアクセスする

Last updated at Posted at 2021-04-27

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)
10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?