python google-app-engine python-requests

¿Se puede usar la biblioteca Python Requests en Google App Engine?



google-app-engine python-requests (5)

¿Puedo usar las Requests en Google App Engine? Creo que esta biblioteca es perfecta para crear un cliente REST.


Instale la biblioteca de requests-toolbelt : https://github.com/sigmavirus24/requests-toolbelt

Para App Engine podría ser algo como: pip install requests-toolbelt -t lib

(Ver: https://cloud.google.com/appengine/docs/python/tools/using-libraries-python-27#installing_a_library )

Luego añade:

from requests_toolbelt.adapters import appengine appengine.monkeypatch()

En tu main.py o equivalente.

Editar : esta solución ahora es parte de la documentación oficial: https://cloud.google.com/appengine/docs/python/issue-requests#issuing_an_http_request (en la pestaña REQUESTS )


No, en una publicación más reciente , los desarrolladores dicen que no son compatibles con GAE porque es muy diferente de Python.


Todavía no, pero con suerte muy pronto. Se está trabajando en la compatibilidad con GAE; consulte el problema #498 (Correcciones de App Engine).

Requests usa urllib3 que a su vez usa httplib que is compatible con GAE como un contenedor para la API de urlfetch . Aunque urllib3 utiliza algunos módulos no disponibles en GAE, este uso se hace deliberadamente optional para que urllib3 se pueda usar en GAE.


esto ahora es posible, lo hice funcionar usando esta combinación de soluciones en appengine_config.py:

# Step 1: first add requests and requests-toolbelt to your requirements.txt (or however you install them via pip) # Step 2: in appengine_config.py add the following snippet: # see https://cloud.google.com/appengine/docs/python/issue-requests#issuing_an_http_request import requests import requests_toolbelt.adapters.appengine # Use the App Engine Requests adapter. This makes sure that Requests uses # URLFetch. requests_toolbelt.adapters.appengine.monkeypatch() # also monkey patch platform.platform() from https://code.google.com/p/googleappengine/issues/detail?id=12982 import platform def patch(module): def decorate(func): setattr(module, func.func_name, func) return func return decorate @patch(platform) def platform(): return ''AppEngine''


Sí. En Google Appengine (versión 1.9.18), las requests versión 2.3.0 funcionan EN PRODUCCIÓN (pero no en SDK) si tiene habilitada la facturación, lo que permite el soporte de sockets.

Actualización : desde el 31 de enero de 2017, Requests está trabajando en producción con la versión 2.9.1 en producción. Sin embargo, no está funcionando con Google cloud SDK 141.0.0

las solicitudes en el Appengine SDK falla con todas las solicitudes https: //:

ConnectionError: (''Connection aborted.'', error(13, ''Permission denied''))

solicita que la versión 2.4.1 falle en producción con:

File "distlib/requests/adapters.py", line 407, in send raise ConnectionError(err, request=request) ConnectionError: (''Connection aborted.'', error(13, ''Permission denied''))

solicita que la versión 2.5.1 falle en la producción con:

File "distlib/requests/adapters.py", line 415, in send raise ConnectionError(err, request=request) ConnectionError: (''Connection aborted.'', error(13, ''Permission denied''))

solicita que la versión 2.3.0 funcione en producción, pero puede causar problemas con el soporte Debian eliminado SSLv3 en el SDK (las solicitudes 2.3.0 vienen con su propio urllib3 ahora obsoleto). Como solución alternativa, es posible eliminar la línea que contiene PROTOCOL_SSLv3 en la fuente de la copia urllib3 de la solicitud.

''module'' object has no attribute ''PROTOCOL_SSLv3''

Información sobre el soporte de sockets: https://cloud.google.com/appengine/docs/python/sockets/