我的最终目标是使用上下文和绘图(来自此示例)检索瓦片地图:
import geopandas
import contextily as ctx
df = geopandas.read_file(geopandas.datasets.get_path('nybb'))
df = df.to_crs(epsg=3857)
ax = df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax)
我在公司代理后面使用 Anaconda。代理在 .condarc 文件中设置正确:
proxy_servers:
http: http://myproxy.com:8080
https: https://myproxy.com:8080
包安装工作正常,conda config --show
确实检测到代理配置。
但是,我在之后收到以下 urllib3 错误ctx.add_basemap(ax)
:
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x000001EDD50E66D8>: Failed to establish a new connection
我不明白的是,尽管有代理配置,但我需要指定代理设置才能使基本的 urllib3 请求工作。
如果没有指定代理:
http = urllib3.PoolManager()
r = http.request('GET', 'http://httpbin.org/robots.txt')
Out: NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000012FE62B0F98>: Failed to establish a new connection:
但是指定代理有效:
proxy = urllib3.ProxyManager('http://myproxy.com:8080')
proxy.request('GET', 'http://google.com/')
Out: <urllib3.response.HTTPResponse at 0x12fe6280048>
我本以为在 Anaconda 中设置代理可以处理任何与 Web 相关的请求。
我想尝试为 urllib3 设置代理信息,据我了解是urllib.request.install_opener(opener)
在https://stackoverflow.com/a/36881923/12356293中完成的,但是对于 urllib3 似乎不存在这样的“开启者”。
到底:
- 如何使用上下文指定代理信息?
- 为什么在 Anaconda 中设置代理信息对于 urllib3 是不够的?
任何帮助表示赞赏,谢谢。