您可以使用 Async Zeep 调用 Basic Auth 背后的 SOAP 服务吗?

Can you use Async Zeep to call a SOAP service behind Basic Auth?

我正在尝试将 Zeep 库的先前工作同步用法转换为它的异步版本。根据对 WSDL 的请求,传输将始终 return 404。

以下是同步实现并且按预期工作。

session = Session()
session.auth = HTTPBasicAuth(username, password)
transport = Transport(session=session)

return Client(config_url, transport=transport)

但是,当我将其更改为异步实现(使用 httpx)时,它将 return 出现传输错误。此传输错误中的唯一消息是 401.

http_client = httpx.Client()
http_client.auth = (username, password)
http_client.verify = True
transport = AsyncTransport(session=http_client)

return AsyncClient(config_url, transport=transport)

我是否正确使用了异步 Zeep?根据 docs 它应该像这样工作

好的,显然界面不完全一样。要使用基本身份验证为 zeep 实例化 AsyncClient,您需要创建同步和异步客户端。

这是因为 zeep 以同步方式获取 WSDL,然后异步执行请求。这意味着 wsdl_client 必须是同步的,而 client 必须是异步的!

async_client = httpx.AsyncClient(
   auth=(username, password),
   verify=True
)
wsdl_client = httpx.Client(
    auth=(username, password),
    verify=True
)

transport = AsyncTransport(client=async_client, wsdl_client=wsdl_client)

return AsyncClient(config_url, transport=transport)

有了这个,我们现在可以等待文档中描述的所有服务请求。