【问题标题】:SSLError: Can't connect to HTTPS URL because the SSL module is not available on google app engineSSLError: Can't connect to HTTPS URL because the SSL module is not available on google app engine
【发布时间】:2015-05-21 18:26:23
【问题描述】:

想用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 请求模块包含在应用引擎项目中。使用 python 2.7。正在寻找解决这个问题的方法,但还没有找到非常明确的方法来解决这个问题

【问题讨论】:

标签: python google-app-engine ssl python-requests wechat


【解决方案1】:

如果您使用的是 GAE 的 Sockets,则只需加载 SSL 库即可获得 SSL 支持而无需任何黑客攻击。

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

libraries:
- name: ssl
  version: latest

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

【讨论】:

    【解决方案2】:

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

    问题是 GAE 有一个选择标准库的“白名单”。 SSL (_ssl, _socket) 不是其中之一。所以,我们需要调整沙箱 环境(危险)小心。以下代码使用标准 开发中提供的 Python 套接字库而不是 GAE 提供的 环境。修改[或创建] appengine_config.py:

    import os
    
    # Workaround the dev-environment SSL
    #   http://stackoverflow.com/q/16192916/893652
    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 和 Python 不是一个常见的用例吗?我想它是。 (编写我的第一个 GAE 应用程序,我自己。)
    • 我同意,SSL 应该是 GAE python 支持的第一个库。
    【解决方案3】:

    扬·多莱西,

    如果您使用 GAE 的 Sockets,则无需任何 只需加载 SSL 库即可破解。

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

    库: - 名称:ssl
    - 版本:最新

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

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 2023-01-05
      • 2022-12-27
      • 2022-12-02
      • 2018-11-30
      • 1970-01-01
      • 2021-10-12
      • 2013-05-14
      • 2022-06-17
      相关资源
      最近更新 更多