Per impostazione predefinita, il runtime Python 2.7 utilizza il servizio di recupero URL per gestire le richieste HTTP(S) in uscita, anche se utilizzi le librerie Python urllib
, urllib2
o httplib
per emettere queste richieste. Recupero URL non gestisce le richieste dalla libreria requests
a meno che non la abiliti esplicitamente.
Il runtime Python 3 non richiede un servizio intermediario per gestire le richieste in uscita. Se non vuoi utilizzare le API di recupero URL, ma hai comunque bisogno di una funzionalità simile, devi eseguire la migrazione di queste richieste in modo da utilizzare una libreria Python standard come la libreria requests
.
Differenze principali tra le librerie di recupero URL e le librerie Python standard
Il limite di dimensioni e le quotas per le richieste gestite dal recupero URL sono diversi dal limite di dimensioni e dalle quotas per le richieste che non sono gestite dal recupero URL.
Con il metodo di recupero URL, quando la tua app invia una richiesta a un'altra app di App Engine, questo strumento aggiunge l'intestazione della richiesta
X-Appengine-Inbound-Appid
per rivendicare l'identità dell'app. L'app che riceve la richiesta può utilizzare l'identità per determinare se deve elaborare la richiesta.Questa intestazione è disponibile solo nelle richieste inviate dalla tua app se utilizza il recupero URL. App Engine rimuove l'intestazione se viene aggiunta da te o da una terza parte a una richiesta.
Per informazioni su come dichiarare e verificare l'identità senza utilizzare il recupero URL, consulta 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 di chiamata quando vengono inviate richieste tra app App Engine, consulta l'esempio di richiesta da App Engine ad App Engine.
Puoi utilizzare il recupero degli URL 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 di recupero URL per effettuare le richieste, aggiorna il codice in modo da utilizzare una libreria Python standard. Ti consigliamo di specificare un timeout per ogni richiesta.
Verifica le richieste in uscita nel server di sviluppo locale.
Configura la tua app per ignorare il recupero URL durante l'esecuzione in App Engine.
Esegui il deployment dell'app.
Sostituzione delle API di recupero URL con una libreria Python
Se non utilizzi già una libreria Python standard per inviare le richieste in uscita, scegli una libreria e aggiungila alle dipendenze dell'app.
Ad esempio, per utilizzare la libreria delle richieste, crea un file
requirements.txt
nella stessa cartella del fileapp.yaml
e aggiungi la riga seguente:requests==2.24.0
Per la compatibilità con Python 2, ti consigliamo di collegare la libreria
requests
alla versione 2.24.0. Quando esegui il deployment dell'app, App Engine scaricherà tutte le dipendenze definite nel filerequirements.txt
.Per lo sviluppo locale, consigliamo di installare le dipendenze in un ambiente virtuale come venv.
Cerca nel tuo codice qualsiasi utilizzo del modulo
google.appengine.api.urlfetch
e aggiorna il codice per usare la tua libreria Python.
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 la 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 eseguite correttamente.
Bypass del recupero degli URL
Per impedire a Recupero URL di gestire le richieste quando esegui il deployment della tua app in App Engine:
Nel file
app.yaml
, imposta la variabile di ambienteGAE_USE_SOCKETS_HTTPLIB
su qualsiasi valore. Il valore può essere qualsiasi valore, inclusa una stringa vuota. Ad esempio:env_variables: GAE_USE_SOCKETS_HTTPLIB : ''
Se hai abilitato Recupero URL per gestire le richieste inviate dalla libreria
requests
, puoi rimuovere le richiesteAppEngineAdapter
dalla tua app.Ad esempio, rimuovi
requests_toolbelt.adapters.appengine
dal fileappengine_config.py
erequests_toolbelt.adapters.appengine.monkeypatch()
dai file Python.
Tieni presente che anche se ignori il metodo di recupero URL 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 della tua app, devi:
-
Visualizza la pagina Quote di App Engine nella console Google Cloud per verificare che l'app non effettui chiamate API Url Fetch.
Se l'app viene eseguita senza errori, utilizza la suddivisione del traffico per accelerare lentamente il traffico dell'app aggiornata. Monitora attentamente l'app per rilevare eventuali problemi prima di indirizzare più traffico all'app aggiornata.