我正在我的项目中为Testrail实现Python客户端(http://docs.gurock.com/testrail-api2/bindings-python(
我正在运行 API 调用"get_test",但收到如下错误
File "playground.py", line 10, in <module>
case = client.send_get('get_test/53948')
File "/Users/bhdev/Work/Python/TBH/testrail.py", line 36, in send_get
return self.__send_request('GET', uri, None)
File "/Users/bhdev/Work/Python/TBH/testrail.py", line 70, in __send_request
response = urllib.request.urlopen(request).read()
File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 223, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 526, in open
response = self._open(req, data)
File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 544, in _open
'_open', req)
File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain
result = func(*args)
File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1361, in https_open
context=self._context, check_hostname=self._check_hostname)
File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1320, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)>
我的代码
from testrail import *
client = APIClient('https://******')
client.user = '*****'
client.password = '******'
case = client.send_get('get_test/xxxx')
print(case)
如何绕过 SSL 证书问题。
谢谢
错误的根本原因是运行请求的计算机不信任TestRail服务器正在使用的证书。
您可以:
- 修复测试轨道服务器上的SSL证书
- 修改绑定 (testrail.py( 以按照 PEP 476 中的说明禁用证书验证::选择退出
根据 github 上当前的 python 绑定源代码,您应该能够禁用证书验证,如下所示:
- 将
import json, base64
(第 14 行(更改为import json, base64, ssl
- 将以下行添加到
__init__(self, base_url)
方法
self.context = ssl._create_unverified_context()
- 修改以下行:
response = urllib.request.urlopen(request).read()
在未经验证的上下文中传递。
response = urllib.request.urlopen(request, context=self.context).read()
这个添加解决了我的情况:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context