SSLError: Can't connect to HTTPS URL because the SSL module is not available on google app engine

SSLError: Can't connect to HTTPS URL because the SSL module is not available on google app engine

想使用wechat sdk创建菜单

WeChat.create_menu({
     "button":[
     {    
          "type":"click",
          "name":"Daily Song",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "type":"click",
           "name":" Artist Profile",
           "key":"V1001_TODAY_SINGER"
      },
      {
           "name":"Menu",
           "sub_button":[
           {    
               "type":"view",
               "name":"Search",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"Video",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"Like us",
               "key":"V1001_GOOD"
            }]
       }]
 })

由于这个错误目前无法工作:

Traceback (most recent call last):
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in Handle
    result = handler(dict(self._environ), self._StartResponse)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1519, in __call__
    response = self._internal_error(e)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/wechatAPIHandler.py", line 72, in post
    "key":"V1001_GOOD"
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/wechat_sdk/basic.py", line 355, in create_menu
    data=menu_data
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/wechat_sdk/basic.py", line 949, in _post
    **kwargs
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/wechat_sdk/basic.py", line 907, in _request
    "access_token": self.access_token,
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/wechat_sdk/basic.py", line 849, in access_token
    self.grant_token()
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/wechat_sdk/basic.py", line 273, in grant_token
    "secret": self.__appsecret,
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/wechat_sdk/basic.py", line 935, in _get
    **kwargs
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/wechat_sdk/basic.py", line 917, in _request
    **kwargs
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/base/data/home/apps/s~project-boom/1.384461758981660124/requests/adapters.py", line 431, in send
    raise SSLError(e, request=request)
SSLError: Can't connect to HTTPS URL because the SSL module is not available.

python 请求模块包含在 App Engine 项目中。使用 python 2.7。正在寻找解决这个问题的方法,但还没有找到非常明确的方法来解决这个问题

This blog post details a solution。来自博客 post:

The problem is GAE has a “whitelist” of select standard libraries. SSL (_ssl, _socket) is not one of them. So, we need to tweak the sandbox environment (dangerous) carefully. The below code uses the standard Python socket library instead of the GAE-provided in the development environment. Modify [or create] appengine_config.py:

import os

# Workaround the dev-environment SSL
#   
if os.environ.get('SERVER_SOFTWARE', '').startswith('Development'):
    import imp
    import os.path
    from google.appengine.tools.devappserver2.python import sandbox

    sandbox._WHITE_LIST_C_MODULES += ['_ssl', '_socket']
    # Use the system socket.
    psocket = os.path.join(os.path.dirname(os.__file__), 'socket.py')
    imp.load_source('socket', psocket)

如果您使用的是 GAE 的套接字,则只需加载 SSL 库即可获得 SSL 支持,而无需任何修改。

只需将此添加到您的 app.yaml 文件中:

libraries:
- name: ssl
  version: latest

这记录在 Google Cloud's OpenSSL Support documentation.

简·多莱西,

If you're using GAE's Sockets, you can get SSL support without any hacks by simply loading the SSL library.

Simply add this to your app.yaml file:

libraries: - name: ssl
- version: latest

如果您遇到 RAND_egd 错误,只需将 app.yaml 中的“-version: latest”更改为“-version: 2.7”!