您可以使用 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)
有了这个,我们现在可以等待文档中描述的所有服务请求。
我正在尝试将 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)
有了这个,我们现在可以等待文档中描述的所有服务请求。