解决以下错误:
错误1:AttributeError: 'module' object has no attribute '_create_unverified_context',
错误2:URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)>
在代码中加入以下代码:
1 import ssl 2 3 try: 4 _create_unverified_https_context = ssl._create_unverified_context 5 except AttributeError: 6 # Legacy Python that doesn't verify HTTPS certificates by default 7 pass 8 else: 9 # Handle target environment that doesn't support HTTPS verification 10 ssl._create_default_https_context = _create_unverified_https_context
官方解释:
This guidance is aimed primarily at system administrators that wish to adopt newer
versions of Python that implement this PEP in legacy environments that do not yet
support certificate verification on HTTPS connections. For example, an administrator
may opt out by adding the monkeypatch above to sitecustomize.py in their Standard
Operating Environment for Python. Applications and libraries SHOULD NOT be making
this change process wide (except perhaps in response to a system administrator
controlled configuration setting). Particularly security sensitive applications should always provide an explicit
application defined SSL context rather than relying on the default behaviour
of the underlying Python implementation.
Python访问https链接错误排查
1. 遇到这种错误有可能是机器无外网权限造成的。
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='', port=443): Max retries exceeded with url: /s/savecomtajax (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7f972f48bf90>: Failed to establish a new connection: [Errno 110] Connection timed out',))
2. requests 发https 请求时,需要忽略证书的验证, 需要注意如下点。
requests.packages.urllib3.disable_warnings() def request_ajax_url(login_url,login_body, headers): '''发送post请求数据''' req = requests.post(login_url, data=login_body, headers=headers, verify=False); return req.text