我正在使用SUDS来使用Web服务.我试着像吼一样:
client = Client(wsdl_url)
list_of_methods = [method for method in client.wsdl.services[0].ports[0].methods]
print(list_of_methods)
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)>
Run Code Online (Sandbox Code Playgroud)
我看到链接,但它只是python 2.7的解决方案.如何通过SUDS绕过SSL?或者是否有任何python解决方案(例如在Windows操作系统中添加假证书)?我正在使用python 3(所以我必须使用urllib而不是urllib2).
一个suds客户端使用的一个子类suds.transport.Transport来处理请求.
使用的默认传输是一个实例suds.transport.https.HttpAuthenticated,但是当您通过传递transport关键字参数来实例化客户端时,可以覆盖它.
http和https传输是通过创建urlopener 使用urllib.request(或urllib2用于python2)实现的.用于创建此urlopener处理程序的列表是通过检索调用了u2handlers()对运输类的方法.这意味着您可以通过继承默认值并覆盖该方法来创建自己的传输,以使用具有特定ssl上下文的HTTPSHander,例如:
from suds.client import Client
from suds.transport.https import HttpAuthenticated
from urllib.request import HTTPSHandler
import ssl
class CustomTransport(HttpAuthenticated):
def u2handlers(self):
# use handlers from superclass
handlers = HttpAuthenticated.u2handlers(self)
# create custom ssl context, e.g.:
ctx = ssl.create_default_context(cafile="/path/to/ca-bundle.pem")
# configure context as needed...
ctx.check_hostname = False
# add a https handler using the custom context
handlers.append(HTTPSHandler(context=ctx))
return handlers
# instantiate client using this transport
c = Client("https://example.org/service?wsdl", transport=CustomTransport())
Run Code Online (Sandbox Code Playgroud)
这段代码对我有用:
from suds.client import Client
import ssl
if hasattr(ssl, '_create_unverified_context'):
ssl._create_default_https_context = ssl._create_unverified_context
cli = Client('https://your_lik_to?wsdl')
print(cli)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8416 次 |
| 最近记录: |