Posso utilizzare Requests su Google App Engine? Penso che questa libreria sia perfetta per creare un client REST.La libreria di richieste Python può essere utilizzata su Google App Engine?
risposta
Sì. Su Google Appengine (versione 1.9.18) requestsversione 2.3.0 funziona IN PRODUZIONE (ma non su SDK) se la fatturazione è abilitata, il che abilita il supporto dei socket.
Aggiornamento: A partire dal 31 gennaio 2017 Richieste sta lavorando in produzione con la versione 2.9.1 in produzione. Tuttavia, non funziona con Google Cloud SDK 141.0.0
richieste sul AppEngine SDK viene a mancare con tutti i https: // richieste:
ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
richieste di versione 2.4.1 non riesce in produzione con:
File "distlib/requests/adapters.py", line 407, in send
raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
richieste versione 2.5.1 non riesce in produzione con:
File "distlib/requests/adapters.py", line 415, in send
raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
richieste di versione 2.3.0 funziona in produzione, ma può causare problemi con Debians rimosso il supporto SSLv3 nell'SDK (le richieste 2.3.0 vengono fornite con il proprio urllib3 ormai obsoleto). Come soluzione alternativa, è possibile eliminare la riga contenente PROTOCOL_SSLv3 nell'origine della copia urllib3 della richiesta.
'module' object has no attribute 'PROTOCOL_SSLv3'
Informazioni sui socket supporto: https://cloud.google.com/appengine/docs/python/sockets/
Non ancora, ma si spera molto presto. È stato elaborato il supporto per GAE - vedere il numero #498 (Correzioni del motore app).
Richieste utilizza urllib3 che a sua volta utilizza httplib quale is supportato su GAE come wrapper per urlfetch API. Sebbene urllib3 utilizzi alcuni moduli non disponibili su GAE, questo utilizzo viene effettuato deliberatamente optional in modo che urllib3 possa essere utilizzato su GAE.
No, in un more recent post, gli sviluppatori dicono di non supportare GAE perché è troppo diverso da Python.
Non lo supportano, ma puoi ancora utilizzare la libreria. Basta scaricare la fonte e importarla direttamente. Se hai bisogno di usare i socket per aggirare i limiti di 'urlfetch()', usa [socket] (https://developers.google.com/appengine/docs/python/sockets/) – user3058197
Ho provato che, non avrebbe importato esso. –
Hai socket abilitati? – user3058197
installare la libreria requests-toolbelt
: https://github.com/sigmavirus24/requests-toolbelt
Per App Engine potrebbe essere qualcosa di simile: pip install requests-toolbelt -t lib
(Vedi: https://cloud.google.com/appengine/docs/python/tools/using-libraries-python-27#installing_a_library)
Quindi aggiungere:
from requests_toolbelt.adapters import appengine
appengine.monkeypatch()
Nel tuo main.py
o equivalente.
Modifica: questa soluzione è ora parte della documentazione ufficiale: https://cloud.google.com/appengine/docs/python/issue-requests#issuing_an_http_request (nella scheda REQUESTS
)
Questa dovrebbe essere la risposta accettata! – Alex
FYI, la riga appengine.monkeypatch() dovrebbe essere nelle importazioni prima di importare eventuali moduli che utilizzano le richieste. –
questo è ora possibile, ho ottenuto che funziona utilizzando questa combinazione di soluzioni alternative in 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'
Grazie, tranne per il fatto che non è necessario alcun rientro per 'def platform()' – vkb
grazie! il codice è ora aggiornato sopra – jcjones1515
questa dovrebbe essere la risposta accettata in quanto per ora Google scrive questo nella loro documentazione. works_toolbelt monkey patch funziona. –
- 1. Impossibile trovare la libreria PIL Python. Google App Engine
- 2. La libreria Libsndfile può essere utilizzata su iPhone iOS?
- 3. Quando la classe Expando deve essere utilizzata nelle app di Google App Engine?
- 4. Utilizzo della libreria python Requests in Google App Engine
- 5. Urrlib3/Richieste: HTTPS problemi su Google App Engine
- 6. Google App Engine Python | APP.YAML
- 7. Errore Python 2.7 su Google App Engine - Threadsafe non può essere abilitato con il gestore CGI
- 8. Come fa andare gestire richieste simultanee su Google App Engine
- 9. GWT su Python App Engine
- 10. Retrolambda su Google App Engine
- 11. eCommerce su Google App Engine
- 12. API di ricerca su Google App Engine
- 13. web.py su Google App Engine
- 14. Google App Engine - Java o Python?
- 15. Django su Google App Engine
- 16. identità federate su Google App Engine
- 17. mlpy, numpy, scipy su Google App Engine
- 18. Google App Engine/Python - Modifica la formattazione di registrazione
- 19. memorizzazione impostazioni app su Google App Engine
- 20. Google App Engine su dominio Google Apps
- 21. Impossibile distribuire Android App Engine progetto su Google App Engine
- 22. fornitore di google app engine oauth2
- 23. API REST in Google App Engine + Python?
- 24. Convertitore PDF di Google App Engine
- 25. Libreria Twitter per App Engine Python?
- 26. Implementazione di tag su Google App Engine
- 27. Grails su Google-App-Engine - È morto?
- 28. Come analizzare xml in Python su Google App Engine
- 29. E-mail rimbalzate su Google App Engine
- 30. Google App Engine Launcher Python Percorso
è possibile correggere le richieste https: // semplicemente caricando la libreria SSL http://stackoverflow.com/a/34135758/172322 – Yahel
le richieste a un sito Web https funzionano anche quando non si abilita la fatturazione: perché? –
Ho appena scoperto che finché la libreria socket non viene effettivamente utilizzata (dalla libreria richiesta), App Engine non genererà un'eccezione se la fatturazione non è stata abilitata (cioè le importazioni inutilizzate e il codice non utilizzato va bene). Questo perché ho fatto solo richieste GET semplici. Ciò che è stato effettivamente chiamato nel codice sottostante era la libreria di raccolta URL di App Engine quando ho controllato la mia quota utilizzata (nel mio caso d'uso, utilizzando urllib2 invece di richieste potrebbe essere un'opzione migliore). Inoltre, funziona senza includere la libreria SSL per il mio caso; Il recupero dell'URL di App Engine supporta https –