为什么在Appengine中使用带有GAE_USE_SOCKETS_HTTPLIB的Google API Python客户端导致ResponseNotReady

gcb*_*zan 2 google-app-engine google-api google-api-python-client

该代码在SDK中运行得很好,但在Google AppEngine上,它会爆炸:

  File "./oauth2client/util.py", line 137, in positional_wrapper
  File "./googleapiclient/discovery.py", line 197, in build
  File "./oauth2client/util.py", line 137, in positional_wrapper
  File "./oauth2client/client.py", line 563, in new_request
  File "./httplib2/__init__.py", line 1608, in request
  File "./httplib2/__init__.py", line 1350, in _request
  File "./httplib2/__init__.py", line 1306, in _conn_request
  File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/python_std_lib/httplib.py", line 1033, in getresponse
    raise ResponseNotReady()
ResponseNotReady
Run Code Online (Sandbox Code Playgroud)

仅当GAE_USE_SOCKETS_HTTPLIB打开时才会发生这种情况.

gcb*_*zan 5

发生这种情况是因为Google API库不知道这一点,并盲目地使用套接字连接到https://www.googleapis.com,这是不允许的.此外,实际代码隐藏了真正的错误,在尝试创建套接字时权限被拒绝.

我不知道任何解决方法,除了禁用httplib的套接字,或不使用提供的库,但使用基于请求的一个并安装使用urlfetch这些域的适配器.