geopy.geocoders报SSL: CERTIFICATE_VERIFY_FAILED错误,如何解决?
解决Nominatim SSL证书验证失败问题
这个错误的核心原因是公司网络环境的SSL证书信任链不完整——公司大概率使用了代理服务器或内部根证书,导致Python环境无法验证Nominatim服务器的合法SSL证书。以下是几种可行的解决办法:
方案1:临时禁用SSL证书验证(应急用,不推荐长期使用)
通过修改SSL上下文跳过证书验证,快速解决问题:
from geopy.geocoders import Nominatim import ssl # 创建不验证证书的SSL上下文 ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE geolocator = Nominatim(user_agent="ryan_data", ssl_context=ctx) location = geolocator.geocode("175 5th Avenue NYC") print(location.address)
或者用更简洁的全局修改方式:
from geopy.geocoders import Nominatim import ssl ssl._create_default_https_context = ssl._create_unverified_context geolocator = Nominatim(user_agent="ryan_data") location = geolocator.geocode("175 5th Avenue NYC") print(location.address)
方案2:导入公司内部根证书(安全合规,推荐)
联系公司IT部门获取内部根证书文件(通常为.pem或.crt格式),在代码中指定信任该证书:
from geopy.geocoders import Nominatim import ssl # 加载公司根证书 ctx = ssl.create_default_context(cafile="/path/to/company-root-cert.pem") geolocator = Nominatim(user_agent="ryan_data", ssl_context=ctx) location = geolocator.geocode("175 5th Avenue NYC") print(location.address)
也可以将公司根证书添加到Python默认信任库(路径可通过ssl.get_default_verify_paths()查询),无需每次修改代码。
方案3:配置公司代理(如果网络需通过代理访问外部)
若公司要求通过代理访问外网,初始化Nominatim时添加代理参数:
from geopy.geocoders import Nominatim proxies = { "http": "http://your-company-proxy:port", "https": "https://your-company-proxy:port" } # 代理需认证的格式:http://username:password@your-company-proxy:port geolocator = Nominatim(user_agent="ryan_data", proxies=proxies) location = geolocator.geocode("175 5th Avenue NYC") print(location.address)
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

