2015-05-21 3 views
17

desidera utilizzare wechat sdk al menu creareSSLError: Impossibile connettersi a HTTPS URL perché il modulo SSL non è disponibile su App Engine di Google

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

Attualmente non funziona a causa di questo errore:

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. 

Il modulo di richiesta python è incluso nel progetto del motore dell'app. Utilizzando python 2.7. Essere alla ricerca di modi per risolvere questo problema, ma non hanno trovato il modo molto chiaro per risolvere il problema ancora

+0

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

risposta

30

Se stai usando Sockets di Gae, è possibile ottenere il supporto SSL, senza alcun hack, semplicemente caricando la libreria SSL.

Basta aggiungere questo al file app.yaml:

libraries: 
- name: ssl 
    version: latest 

Questo è documentato sul Google Cloud's OpenSSL Support documentation.

+0

Questo porta a ulteriori errori: 'ImportError: impossibile importare il nome RAND_egd' –

12

This blog post details a solution. Dal post del blog:

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

Perché è necessaria una tale correzione? Non sta usando SSL con Python su GAE un caso d'uso comune? Immagino lo sia. (Scrivendo la mia prima app GAE, me stesso.) – hourback

+0

Sono d'accordo, SSL avrebbe dovuto essere una delle prime librerie GAE python supportate. – Tyguy7

0

gen 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

Se si verifica l'errore RAND_egd, basta cambiare "-version: latest" nella tua app.yaml, in "-version: 2.7"!

Problemi correlati