2017-03-06 179 views
0

的Python:2.7.6Python Web服務:嘗試使用ZEEP SOAP客戶端連接到WSDL端點提供了連接錯誤

ZEEP:1.1.0

我試圖達到網絡的WSDL端點服務網址。我目前正在使用zeep SOAP客戶端,並且也嘗試了suds(並得到了類似的結果)。當我從網絡訪問URL或發送curl請求時,我收到回覆並可以看到這些服務。但是當我嘗試從zeep(使用python -mzeep [url]命令)或suds(通過打印(客戶端))訪問它時,出現連接錯誤。

urllib2.URLError: <urlopen error [Errno -2] Name or service not known> 

我粘貼了下面的完整錯誤。不幸的是,我無法在這裏分享這個網址,所以我改變了我的帖子。

在我的代碼,我有以下

from zeep import Client 
endpoint_url = 'http://12.345.678.90:8080/PathGoesHere?wsdl' 
client = Client(endpoint_url) 

我也曾嘗試以下

sudo python -mzeep http://12.345.678.90:8080/PathGoesHere?wsdl 

錯誤:

Traceback (most recent call last): 
    File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
    File "/usr/lib/python2.7/runpy.py", line 72, in _run_code 
    exec code in run_globals 
    File "/usr/local/lib/python2.7/dist-packages/zeep/__main__.py", line 86, in <module> 
    main(args) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/__main__.py", line 75, in main 
    client = Client(args.wsdl_file, transport=transport) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/client.py", line 120, in __init__ 
    self.wsdl = Document(wsdl, self.transport) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/wsdl/wsdl.py", line 65, in __init__ 
    root_definitions = Definition(self, document, self.location) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/wsdl/wsdl.py", line 156, in __init__ 
    self.parse_types(doc) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/wsdl/wsdl.py", line 272, in parse_types 
    self.types.add_documents(schema_nodes, self.location) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/xsd/schema.py", line 96, in add_documents 
    document = self.create_new_document(node, location) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/xsd/schema.py", line 183, in create_new_document 
    schema.load(self, node) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/xsd/schema.py", line 349, in load 
    visitor.visit_schema(node) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/xsd/visitor.py", line 108, in visit_schema 
    self.process(node, parent=parent) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/xsd/visitor.py", line 49, in process 
    result = visit_func(self, node, parent) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/xsd/visitor.py", line 155, in visit_import 
    schema_node = load_external(location, self.schema._transport) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/xsd/utils.py", line 59, in load_external 
    response = transport.load(url) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/transports.py", line 111, in load 
    content = self._load_remote_data(url) 
    File "/usr/local/lib/python2.7/dist-packages/zeep/transports.py", line 126, in _load_remote_data 
    response = self.session.get(url, timeout=self.load_timeout) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 501, in get 
    return self.request('GET', url, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 488, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 609, in send 
    r = adapter.send(request, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 487, in send 
    raise ConnectionError(e, request=request) 
requests.exceptions.ConnectionError: HTTPConnectionPool(host='host.goes.here', port=8080): Max retries exceeded with url: /PathGoesHere?xsd=xsd0 (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7fbf2c442390>: Failed to establish a new connection: [Errno -2] Name or service not known',)) 

我不知道爲什麼它的工作原理,通過瀏覽器/ curl而不是python SOAP客戶端。有沒有什麼我應該改變我的端點URL,比如稍後設置端口?我試過用肥皂水,它給了我一個404錯誤,因爲一個無效的URL。我應該如何解決這個問題/我還能嘗試什麼?

在此先感謝!

回答

0

首先想到的是,你在防火牆後面嗎?這不是有線錯誤,只是因爲URL不可訪問。

對於大多數公司環境,您可以通過瀏覽器訪問URL,但不能從命令行(或Python庫)訪問它。原因是,公司政策已應用於您的計算機,並且瀏覽器使用代理腳本(pac)文件來確定要使用哪個代理。

如果你可以分享你是如何測試網址的,這將是非常有用的。

您可以簡單地使用命令ping來測試該URL是否可訪問。

+0

我也ping通的IP'平12.345.678.90',並得到了迴應 – bbakp3

+0

對不起,我的意思是說 我測試的URL的方式是:1.訪問本地瀏覽器的網址(作品) 2.從我的虛擬主機發送curl請求到URL(作品) 3.對於suds: client = Client(http://12.345.678.90:8080/PathGoesHere?wsdl,cachingpolicy = 1) print(client )' (不起作用) 4.對於zeep: 'sudo python -mzeep http://12.345.678.90:8080/PathGoesHere?wsdl' (不起作用) – bbakp3

+0

運行服務提供商的盒子已關閉防火牆 – bbakp3

0

在我的情況似乎從

http://12.345.678.90:8080/PathGoesHere?wsdl 

改變我的網址端點

http://12.345.678.90:8080/PathGoesHere?singleWsdl 

的伎倆