2

zeepを使用して SOAP サーバーにアクセスしようとしています。私のサーバーはカスタム証明書で SSL を使用しており、そのサーバーへの接続は私の証明書で、またはそれを無視して機能します。

python -mzeep "https://<server-ip>/servicemanager/1?wsdl" --no-verify

プレフィックス、グローバル要素、グローバル タイプ、バインディング、およびサービスの長いリストを取得します。後者は次のように述べています。

Service: ServiceManager
     Port: servicemanager_1 (Soap11Binding: {http://soap.client.<snipped>.at}servicemanager_1Binding)
         Operations:
            getServices() -> return: ns0:service[]

ここまでで言えることは、clientオブジェクトを作成して という名前のサービスを呼び出すことができるということgetServices()です。

from zeep import CachingClient as Client
from zeep.wsse.signature import Signature
from zeep.transports import Transport
from requests import Session, Request

session = Session()
session.verify = False
transport = Transport(session=session)

c = Client('https://<server-ip>/servicemanager/1?wsdl', transport=transport)
c.service.getServices()

しかし、それは urllib3 ( ~/.virtualenvs/soap/lib/python3.5/site-packages/urllib3/util/connection.py ) でエラーにつながります:

ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:
[...]
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='localhost',
port=443): Max retries exceeded with url: /servicemanager/1 (Caused by
NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object
at 0x7f4e2a6f7d30>: Failed to establish a new connection: [Errno 111]
Connection refused',))

SSL 検証を無視するか、CA_BUNDLE を提供するかは問題ではありません。両方が受け入れられ、クライアントが作成されますが、getServices()メソッドを呼び出すことができません。

ここで私は何を忘れましたか?基になる urllib3 が例外をスローするため、これはジープの問題ではないと思います。しかし、私は何時間も試み、インターネットで解決策を探しましたが、成功しませんでした.

エンドポイントから取得した XML の一部は次のとおりです。

<service name="ServiceManager">
  <port name="servicemanager_1" binding="tns:servicemanager_1Binding">
    <soap:address location="http://localhost/servicemanager/1"/>
  </port>
</service>

そして、なぜそこに「localhost」が返されるのかわかりません-zeepはそれを呼び出しに使用していますか? 次に、永続的なエラーが発生する理由を理解します。

ヒントはありますか?

4

2 に答える 2