MacOS 高 OSierra 10.13.6、Python3.7、GeocoderServiceError: [SSL: CERTIFICATE_VERIFY_FAILED]
Posted
技术标签:
【中文标题】MacOS 高 OSierra 10.13.6、Python3.7、GeocoderServiceError: [SSL: CERTIFICATE_VERIFY_FAILED]【英文标题】:MacOS High OSierra 10.13.6, Python3.7, GeocoderServiceError: [SSL: CERTIFICATE_VERIFY_FAILED] 【发布时间】:2019-02-09 23:51:36 【问题描述】:我最近在 macOS High OSierra 上安装了 python 3.7,并花了很长时间试图让它工作。这个问题是here。目前我在使用以下代码时遇到问题,想知道是否有人可以提供帮助。
import geopy
geocoder = geopy.geocoders.GoogleV3(domain = "maps.google.co.uk")
geocoder.geocode("Cambridge", exactly_one = False)
导致以下错误:
SSLCertVerificationError Traceback(最近一次调用最后一次) /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py 在 do_open(self, http_class, req, **http_conn_args) 1316 h.request(req.get_method(), req.selector, req.data, headers, -> 1317 encode_chunked=req.has_header('Transfer-encoding')) 1318 除了 OSError as err: # timeout error
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py 在请求中(自我、方法、url、正文、标头、encode_chunked)1228 """向服务器发送一个完整的请求。""" -> 1229 self._send_request(方法、url、正文、标头、encode_chunked)1230
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py 在 _send_request(self, method, url, body, headers, encode_chunked) 第1274章 -> 1275 self.endheaders(正文,encode_chunked=encode_chunked)1276
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py 在 endheaders(self, message_body, encode_chunked) 1223 提高无法发送标头() -> 1224 self._send_output(message_body,encode_chunked=encode_chunked)1225
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py 在 _send_output(self, message_body, encode_chunked) 1015 del self._buffer[:] -> 1016 self.send(msg) 1017
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py 在发送(自我,数据) 955 如果 self.auto_open: --> 956 self.connect() 第957章:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py 在连接(自我)1391 self.sock = self._context.wrap_socket(self.sock, -> 1392 服务器主机名=服务器主机名)1393
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py 在 wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs,服务器主机名,会话) 第411章 --> 412 会话=会话 第413章
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py 在 _create(cls, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs、server_hostname、上下文、会话) 第849章 非阻塞套接字") --> 850 self.do_handshake() 851 除外(OSError,ValueError):
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py 在 do_handshake(self, block) 1107 self.settimeout(无) -> 1108 self._sslobj.do_handshake() 1109 最后:
SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书中有自签名证书 链 (_ssl.c:1045)
在处理上述异常的过程中,又发生了一个异常:
URLError Traceback(最近一次调用最后一次) /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/geopy/geocoders/base.py 在 _call_geocoder(self, url, timeout, raw, requester, deserializer, **kwargs) 314尝试: --> 315 page = requester(req, timeout=timeout, **kwargs) 316 例外为错误:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py 在打开(自我,完整网址,数据,超时) 524 --> 525 响应 = self._open(req, data) 第526章
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py 在 _open(self, req, data) 542 结果 = self._call_chain(self.handle_open,协议,协议 + --> 543 '_open',请求) 544 如果结果:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py 在 _call_chain(self, chain, kind, meth_name, *args) 第502章 --> 503 结果 = func(*args) 504 如果结果不是无:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py 在 https_open(self, req) 1359 返回 self.do_open(http.client.HTTPSConnection, req, -> 1360 上下文=self._context,check_hostname=self._check_hostname)1361
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py 在 do_open(self, http_class, req, **http_conn_args) 1318 除了 OSError as err: # 超时错误 -> 1319 引发 URLError(err) 1320 r = h.getresponse()
网址错误:
在处理上述异常的过程中,又发生了一个异常:
GeocoderServiceError Traceback(最近一次调用最后一次) 在 () ----> 1 geocoder.geocode("Cambridge", exact_one = False)
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/geopy/geocoders/googlev3.py 在地理编码(自我,查询,exact_one,超时,边界,区域, 组件、语言、传感器) 240 logger.debug("%s.geocode: %s", self.class.name, url) 第241章 --> 242 self._call_geocoder(url, timeout=timeout), exact_one 243) 244
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/geopy/geocoders/base.py 在 _call_geocoder(self, url, timeout, raw, requester, deserializer, **kwargs) 340 如果消息中“超时”: 341 raise GeocoderTimedOut('服务超时') --> 342 引发 GeocoderServiceError(消息) 343 第344章
GeocoderServiceError:[SSL:CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:1045)
【问题讨论】:
您是否在使用某种代理?因为“maps.google.co.uk”肯定没有使用自签名证书,但您收到错误消息“证书验证失败:证书链中的自签名证书” 我搜索了如何检查我是否在代理后面 => 在 Google Chrome 浏览器中转到高级设置 -> 网络 -> 代理并检查是否勾选了任何选项。他们都没有勾选。这回答了你的问题了吗?或者,是否有另一种方法可以确定我是否支持某个代理?谢谢 首先从您的 Python 代码中检查maps.google.co.uk
确实解析到的 IP 地址,以及它们是否真的来自 Google。然后,即使 Chrome 没有使用代理,您的 Python 代码也可能正在使用代理。你也试过用其他名字吗?如果您更改计算机所连接的网络,结果是否会改变?
【参考方案1】:
看看下面的链接:here
我能够通过在该页面上运行第二个命令来使其工作:
open /Applications/Python\ 3.7/Install\ Certificates.command
【讨论】:
以上是关于MacOS 高 OSierra 10.13.6、Python3.7、GeocoderServiceError: [SSL: CERTIFICATE_VERIFY_FAILED]的主要内容,如果未能解决你的问题,请参考以下文章
Hackintosh macOS High Sierra 10.13.6(17G65) 装机心得
在 macOS High Sierra (10.13.6) 上使用 R (v3.6.0) 中的 PhantomJS 进行 Webscraping Javascript 表返回部分表