【问题标题】:GET request resulting in VerifiedHTTPSConnection object has no attribute '_tunnel_host'导致 VerifiedHTTPSConnection 对象的 GET 请求没有属性“_tunnel_host”
【发布时间】:2019-03-26 13:25:50
【问题描述】:

我正在使用 python 请求库向 GAE 上托管的 API 发出 HTTP GET 请求。请求版本为requests==2.20.0,并使用虚拟环境通过 pip 安装。

据报道该问题是由过时的 python 版本引起的,我正在运行最新版本的 python 2 (2.7.15)。

这里是截取的代码:

endpoint_url = API_URL + "some/endpoint/%s" % some_variable
response = requests.get(url=endpoint_url)
return response.text

这里是堆栈空间:

Traceback (most recent call last):
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/flask/app.py", line 2292, in 
wsgi_app
response = self.full_dispatch_request()
File "/Users/rhys/Desktop/Projects/git-r 
repositories/MitigatingCircumstancesTracker/lib/flask/app.py", line 1815, in 
full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/flask/app.py", line 1718, in 
handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/flask/app.py", line 1813, in 
full_dispatch_request
rv = self.dispatch_request()
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/flask/app.py", line 1799, in 
dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/main.py", line 83, in login
response = requests.get(url=endpoint_url)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/requests/api.py", line 75, in 
get
return request('get', url, params=params, **kwargs)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/requests/api.py", line 60, in 
request
return session.request(method=method, url=url, **kwargs)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/requests/sessions.py", line 
524, in request
resp = self.send(prep, **send_kwargs)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/requests/sessions.py", line 
637, in send
r = adapter.send(request, **kwargs)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/requests/adapters.py", line 
449, in send
timeout=timeout
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/urllib3/connectionpool.py", 
line 600, in urlopen
chunked=chunked)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/urllib3/connectionpool.py", 
line 343, in _make_request
self._validate_conn(conn)
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/urllib3/connectionpool.py", 
line 839, in _validate_conn
conn.connect()
File "/Users/rhys/Desktop/Projects/git- 
repositories/MitigatingCircumstancesTracker/lib/urllib3/connection.py", line 
304, in connect
if self._tunnel_host:
AttributeError: 'VerifiedHTTPSConnection' object has no attribute 
'_tunnel_host'

来自'python --version' 2.7.15的Python版本

requirements.txt:

bcrypt==3.1.4
certifi==2018.10.15
cffi==1.11.5
chardet==3.0.4
Click==7.0
Flask==1.0.2
idna==2.7
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
pycparser==2.19
requests==2.20.0
six==1.11.0
urllib3==1.24
Werkzeug==0.14.1

【问题讨论】:

  • 你能把python --versionpip freeze的输出加起来吗?
  • $ python --version = Python 2.7.15 && $ pip freeze = virtualenv==16.0.0
  • 你安装的唯一依赖是virtualenv?
  • 不,我安装了许多其他依赖项,请参阅上面我的 requirements.txt 的内容。
  • 即使这些依赖项在您的requirements.txt 中,但这并不意味着它们在您的虚拟环境中可用。您需要pip install -r requirements.txt 来安装它们。

标签: python python-2.7 google-app-engine python-requests


【解决方案1】:

我遇到了同样的问题。就我而言,这显然与 Google App Engine 无法在本地开发环境(使用 SDK)中处理请求有关。 需要AppEngineAdapter requests_toolbelt。之后为我工作。

【讨论】:

  • 非常感谢@EricR6。那工作得很好。我只需要在我的 requirements.txt 文件中添加 requests_toolbeltfrom requests_toolbelt.adapters import appengine appengine.monkeypatch() 当我初始化我的应用程序时。
  • @ThibaultLeConte 这确实解决了问题,我确实想知道是否是GAE的本地环境是问题所在。这是我错过的某处记录的问题吗?无论如何,谢谢你,因为我开始使用标准的 urllib 库,所以节省了很多额外的工作!
  • 对于 appengine/python2.7:from requests_toolbelt.adapters import appengine appengine.monkeypatch()
【解决方案2】:

为了修复使用 Google App Engine 的请求,同时允许我的应用程序在 GAE 之外运行,我添加了以下代码:

try:
    from google.appengine.api import urlfetch
    from requests_toolbelt.adapters import appengine
    appengine.monkeypatch()
except ImportError:
    pass

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 2019-05-30
    • 2016-10-02
    • 1970-01-01
    • 2014-06-26
    • 2015-08-17
    • 2023-03-26
    • 2012-08-22
    相关资源
    最近更新 更多