【问题标题】:How can I disable SSL verification in a third party python library?如何在第三方 python 库中禁用 SSL 验证?
【发布时间】:2018-08-01 06:24:03
【问题描述】:

我正在使用 Python 库 OSMnx,它会向 nomatim.openstreetmap.org 发送请求,以生成和加载地图,然后用于创建网络。但是,当我尝试通过 VPN 或在办公室运行它时,我得到了这个:

File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\ProgramData\Anaconda3\lib\site-packages\dash\dash.py", line 551, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "C:\ProgramData\Anaconda3\lib\site-packages\dash\dash.py", line 508, in add_context
output_value = func(*args, **kwargs)
File "OSMnxTest.py", line 125, in createNetwork
gdf = ox.gdf_from_place(location)
File "C:\ProgramData\Anaconda3\lib\site-packages\osmnx\core.py", line 414, in gdf_from_place
data = osm_polygon_download(query, limit=which_result)
File "C:\ProgramData\Anaconda3\lib\site-packages\osmnx\core.py", line 382, in osm_polygon_download
response_json = nominatim_request(params=params, timeout=30)
File "C:\ProgramData\Anaconda3\lib\site-packages\osmnx\core.py", line 238, in nominatim_request
response = requests.get(url, params=params, timeout=timeout, headers=get_http_headers())
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\adapters.py", line 506, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='nominatim.openstreetmap.org', port=443): Max retries exceeded with url: /search?format=json&limit=1&dedupe=0&polygon_geojson=1&q=mclean%2Cva%2Cusa (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))

我想在我正在创建的脚本中实施修复,并且我知道禁用对证书的对等验证的危险,所以我只想为我发送的所有查询设置 ssl_verify 参数 false通过这个图书馆。我该怎么做呢?

【问题讨论】:

  • 您必须将参数验证设置为 false 来拉取请求。尝试打开 C:\ProgramData\Anaconda3\lib\site-packages\osmnx\core.py 并在第 238 行替换为 response = requests.get(url, params=params, timeout=timeout, headers=get_http_headers(), verify = 假)
  • 这可行,但我试图避免更改库中的模块,因为我不想每次更新库或在不同的计算机上使用它时都必须更改它。相反,我正在寻找可以在我的脚本中做的事情
  • 您找到解决方案了吗?谢谢!巧合的是,我在使用 osmnx 时遇到了同样的问题。
  • @agronskiy ,@Lupanoide 的回应是我能想到的最好的方法,回顾一下。无法通过将参数传递给 gdf_from_place 函数来将 SSL 验证设置为 false,因此您必须更改 \lib\site-packages\osmnx\core.py 文件中的实际请求语法。或者,您可以联系您的 VPN 提供商、公司或 ISP,并确保您的所有证书都已正确设置,这可能会解决问题。
  • 我们最近向 OSMnx 添加了功能,允许用户覆盖请求的参数来解决此类问题。这将出现在下一个版本中,或者您可以立即从 Github 安装主分支以同时使用最新功能。

标签: python ssl ssl-certificate verify


【解决方案1】:

OSMnx 可以通过ox.config() 函数将now 指向本地证书文件或覆盖请求的参数,如身份验证、证书、验证和代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多