Per impostazione predefinita, il runtime di Python 2.7
utilizza il servizio di recupero dell'URL
per gestire le richieste HTTP(S) in uscita, anche se utilizzi le librerie Python urllib
, urllib2
o httplib
per inviare queste richieste. Il recupero URL non gestisce
richieste dalla libreria requests
a meno che tu non fornisca esplicitamente
abilitarlo.
Il runtime Python 3 non ha bisogno di un servizio intermediario per gestire in uscita
richieste. Se non vuoi più utilizzare le API di recupero URL
ma hanno comunque bisogno di funzionalità simili, devi eseguire la migrazione delle richieste per utilizzare
una libreria Python standard come
Raccolta requests
.
Differenze principali tra URL Fetch e le librerie Python standard
Il limite di dimensioni e le quote per le richieste gestite dal recupero URL sono diverse limite di dimensione e quote per le richieste che non sono gestite dal recupero URL.
Con il recupero URL, quando la tua app invia una richiesta a un'altra app di App Engine, Il recupero URL aggiunge l'intestazione della richiesta
X-Appengine-Inbound-Appid
per dichiarare l'identità dell'app. L'app che riceve la richiesta può utilizzare l'identità per determinare se deve elaborare la richiesta.Questo intestazione è disponibile solo nelle richieste inviate dalla tua app se utilizza il recupero dell'URL. App Engine rimuove l'intestazione se tu o una terza parte la aggiungete a una richiesta.
Per informazioni su come affermare e verificare l'identità senza utilizzare il recupero dell'URL, consulta Eseguire la migrazione dell'identità dell'app ai token ID OIDC.
Per un esempio di come utilizzare l'intestazione della richiesta per verificare l'identità dell'app chiamante quando le richieste vengono inviate tra app App Engine, consulta Esempio di richiesta da App Engine ad App Engine.
Puoi utilizzare URL Fetch per impostare un timeout predefinito per tutte le richieste. La maggior parte delle librerie Python 3, come
requests
eurllib
, imposta il timeout predefinito suNone
, quindi devi aggiornare ogni richiesta effettuata dal codice per specificare un timeout.
Panoramica del processo di migrazione
Se la tua app utilizza le API URL Fetch per effettuare richieste, aggiorna il codice per utilizzare una libreria Python standard. Ti consigliamo di specificare un timeout per ogni richiesta.
Testa le richieste in uscita nel server di sviluppo locale.
Configura la tua app in modo da ignorare il recupero URL quando viene eseguita in in App Engine.
Esegui il deployment dell'app.
Sostituzione delle API URL Fetch con una libreria Python
Se non stai già utilizzando una libreria Python standard per inviare messaggi in uscita richieste, scegli una libreria e aggiungila alle dipendenze dell'app.
Ad esempio, per utilizzare la libreria Requests, crea un file
requirements.txt
nella stessa cartella del fileapp.yaml
e aggiungi la seguente riga:requests==2.24.0
Per la compatibilità con Python 2, ti consigliamo di bloccare la libreria
requests
alla versione 2.24.0. Quando esegui il deployment dell'app, App Engine scarica tutte le dipendenze definite nel filerequirements.txt
.Per lo sviluppo locale, ti consigliamo di installare le dipendenze in un ambiente in un ambiente come venv.
Cerca nel codice eventuali utilizzi del
google.appengine.api.urlfetch
modulo e aggiorna il codice in modo che utilizzi la libreria Python.
Eseguire richieste HTTPS semplici
L'esempio seguente mostra come effettuare una richiesta HTTPS standard utilizzando la libreria requests
:
Esecuzione di richieste HTTPS asincrone
L'esempio seguente mostra come effettuare una richiesta HTTPS asincrona utilizzando il metodo
Libreria requests
:
Test in locale
Se hai aggiornato una delle richieste in uscita, esegui l'app nel server di sviluppo locale e verifica che le richieste vengano completate correttamente.
Bypassare il recupero dell'URL
Per impedire a URL Fetch di gestire le richieste quando esegui il deployment dell'app in App Engine:
Nel file
app.yaml
, imposta la variabile di ambienteGAE_USE_SOCKETS_HTTPLIB
su un valore qualsiasi. Il valore può essere qualsiasi, inclusa una stringa vuota. Ad esempio:env_variables: GAE_USE_SOCKETS_HTTPLIB : ''
Se hai abilitato il recupero URL per gestire le richieste inviate dalla libreria
requests
, puoi rimuovere le richiesteAppEngineAdapter
dalla tua app.Ad esempio, rimuovi
requests_toolbelt.adapters.appengine
dalappengine_config.py
file erequests_toolbelt.adapters.appengine.monkeypatch()
dai file Python.
Tieni presente che, anche se ignori URL Fetch come descritto nei passaggi precedenti, la tua app può comunque utilizzare direttamente l'API URL Fetch.
Deployment dell'app
Quando è tutto pronto per eseguire il deployment dell'app, devi:
-
Per confermare, visualizza la pagina Quote di App Engine nella console Google Cloud che la tua app non effettua chiamate all'API Url Fetch.
Se l'app viene eseguita senza errori, utilizza il traffico da dividere in lentamente aumentare il traffico per la tua app aggiornata. Monitora attentamente l'app per individuare prima di indirizzare una quantità maggiore di traffico all'app aggiornata.