当我使用zeep的时候,我会得到这个“禁止的url”错误。有人知道根本原因是什么吗?我尝试从zeep的客户端对象中使用一些选项,但没有结果。或者我的WSDL文件有问题吗?奇怪的是,这段代码在几个月前曾经运行良好,然后突然开始得到这个错误。
这是从错误返回的跟踪:
Traceback (most recent call last):
File "/usr/src/app/attpcdaq/daq/tasks.py", line 33, in eccserver_refresh_state_task
ecc_server.refresh_state()
File "/usr/src/app/attpcdaq/daq/models.py", line 428, in refresh_state
client = self._get_soap_client()
File "/usr/src/app/attpcdaq/daq/models.py", line 308, in _get_soap_client
return EccClient(self.ecc_url)
File "/usr/src/app/attpcdaq/daq/models.py", line 65, in __init__
client = SoapClient(wsdl_url) # Loads the service definition from ecc.wsdl
File "/usr/local/lib/python3.7/site-packages/zeep/client.py", line 73, in __init__
self.wsdl = Document(wsdl, self.transport, settings=self.settings)
File "/usr/local/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 92, in __init__
self.load(location)
File "/usr/local/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 97, in load
root_definitions = Definition(self, document, self.location)
File "/usr/local/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 193, in __init__
self._load(doc)
File "/usr/local/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 198, in _load
self.parse_types(doc)
File "/usr/local/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 330, in parse_types
self.types.add_documents(schema_nodes, self.location)
File "/usr/local/lib/python3.7/site-packages/zeep/xsd/schema.py", line 111, in add_documents
document = self.create_new_document(node, location)
File "/usr/local/lib/python3.7/site-packages/zeep/xsd/schema.py", line 195, in create_new_document
schema.load(self, node)
File "/usr/local/lib/python3.7/site-packages/zeep/xsd/schema.py", line 421, in load
visitor.visit_schema(node)
File "/usr/local/lib/python3.7/site-packages/zeep/xsd/visitor.py", line 165, in visit_schema
self.process(child, parent=node)
File "/usr/local/lib/python3.7/site-packages/zeep/xsd/visitor.py", line 93, in process
result = visit_func(self, node, parent)
File "/usr/local/lib/python3.7/site-packages/zeep/xsd/visitor.py", line 238, in visit_import
schema_node = self._retrieve_data(location, base_url=self.document._location)
File "/usr/local/lib/python3.7/site-packages/zeep/xsd/visitor.py", line 1199, in _retrieve_data
url, self.schema._transport, base_url, settings=self.schema.settings
File "/usr/local/lib/python3.7/site-packages/zeep/loader.py", line 87, in load_external
content = transport.load(url)
File "/usr/local/lib/python3.7/site-packages/zeep/transports.py", line 122, in load
content = self._load_remote_data(url)
File "/usr/local/lib/python3.7/site-packages/zeep/transports.py", line 135, in _load_remote_data
response.raise_for_status()
File "/usr/local/lib/python3.7/site-packages/requests/models.py", line 960, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://schemas.xmlsoap.org/soap/encoding/
发布于 2022-07-22 13:07:42
您需要通过启用传输缓存来缓存WSDL:
from zeep.cache import InMemoryCache
Client(soap_url, transport=Transport(
cache=InMemoryCache(),
))
正式文件建议使用SqliteCache
而不是InMemoryCache
from zeep import Client
from zeep.cache import SqliteCache
from zeep.transports import Transport
transport = Transport(cache=SqliteCache())
client = Client(
'http://www.webservicex.net/ConvertSpeed.asmx?WSDL',
transport=transport)
https://stackoverflow.com/questions/71919280
复制相似问题