问题描述
我正在尝试将 Zeep 库的先前工作同步使用转换为此的异步版本。在向 WSDL 发出请求时,传输将始终返回 404。
以下是同步实现并按预期工作。
session = Session()
session.auth = HTTPBasicAuth(username,password)
transport = Transport(session=session)
return Client(config_url,transport=transport)
但是,当我将其更改为异步实现(使用 httpx)时,它将返回传输错误。此传输错误中的唯一消息是 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,verify=True
)
transport = AsyncTransport(client=async_client,wsdl_client=wsdl_client)
return AsyncClient(config_url,transport=transport)
有了这个,我们现在可以等待文档中描述的所有服务请求。