원격 WSDL에서 Zeep Client를 만들면 해당 문서와 그 import를 즉시 가져올 수 있습니다. Client가 이미 서비스 설명을 로드하려고 시도한 뒤 프록시를 설정하는 대신, Transport를 먼저 구성하세요.

from requests import Session
from zeep import Client
from zeep.transports import Transport

session = Session()
session.proxies.update({
    "http": "http://proxy.example.net:8080",
    "https": "http://proxy.example.net:8080",
})

transport = Transport(
    session=session,
    timeout=10,
    operation_timeout=30,
)
client = Client(wsdl_url, transport=transport)

wsdl_url은 실제 서비스 설명 URL입니다. 해당 서비스와 그 import에 공개적으로 접근할 수 있고 공개 프록시가 허용된다면, HTTP 프록시 목록이 세션의 프록시 URL 후보를 제공합니다. 구성한 세션은 이후 SOAP 작업을 위해 살려 두고, 그 작업이 끝나면 닫으세요.

Transport.timeout은 WSDL과 XSD 로딩을 제어합니다. operation_timeout은 서비스 작업을 위한 HTTP 요청을 제어합니다. 따라서 Client를 만드는 동안의 메타데이터 타임아웃은 나중에 메서드 호출이 타임아웃되는 것과 다른 단계입니다.

이 예제에서는 Requests의 환경 통합이 계속 활성화됩니다. 환경 프록시 값이 명시적으로 필요한 경로와 충돌한다면 session.trust_env=False를 사용하고 필요한 CA 번들과 인증 설정을 명시적으로 제공하세요.

초기화가 계속 실패하면 가져온 문서의 URL을 확인하세요. 최상위 WSDL은 정상적으로 로드되지만 가져온 schema가 다른 호스트 이름이나 대상 프로토콜을 사용할 수 있습니다.

관련 글