2015-05-21 5 views
17

Wollen wechat sdk verwenden Menü erstellenSSLError: Kann nicht an HTTPS-URL verbinden, weil das SSL-Modul auf Google App Engine nicht verfügbar ist

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" 
      }] 
     }] 
}) 

Zeit nicht wegen dieses Fehlers arbeiten:

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-Anforderungsmodul ist im App-Engine-Projekt enthalten. Verwenden von Python 2.7. Suche nach Wegen, um dieses Problem zu lösen, aber habe keinen sehr klaren Weg gefunden, das Problem zu lösen

+0

http://stackoverflow.com/questions/9604799/can-python-requests-library-be-used-on-google-app-engine/28544823#28544823 – kichik

Antwort

30

Wenn Sie GAE Sockets verwenden, können Sie SSL-Unterstützung ohne Hacks durch einfachen Laden der SSL-Bibliothek erhalten.

einfach diese Datei auf Ihrem app.yaml hinzufügen:

libraries: 
- name: ssl 
    version: latest 

Dieses auf Google Cloud's OpenSSL Support documentation. dokumentiert

+0

Dies führt nur zu weiteren Fehlern: 'ImportError: Name RAND_egd kann nicht importiert werden –

12

This blog post details a solution. Aus der Blog-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 
# 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) 
+3

Warum ist eine solche Korrektur erforderlich? Wird SSL mit Python auf GAE nicht häufig verwendet? Ich könnte mir vorstellen, dass es so ist. (Ich schreibe meine erste GAE-App selbst.) – hourback

+0

Ich stimme zu, SSL sollte eine der ersten GAE-unterstützten Python-Bibliotheken sein. – Tyguy7

0

Jan Dolejsi,

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

Wenn Sie erleben RAND_egd Fehler, nur ändern "-version: neuste" in deiner app.yaml, bis "-version: 2.7"!