Según la configuración predeterminada, el entorno de ejecución de Python 2.7 usa el servicio de recuperación de URL a fin de controlar las solicitudes HTTP(S) salientes, incluso si usas las bibliotecas de Python urllib
, urllib2
o httplib
para emitir esas solicitudes. La recuperación de URL no controla las solicitudes de la biblioteca requests
a menos que la habilites de forma explícita.
El entorno de ejecución de Python 3 no necesita un servicio intermediario para controlar las solicitudes salientes. Si deseas dejar de usar las API de recuperación de URL, pero aún necesitas una funcionalidad similar, debes migrar esas solicitudes para usar una biblioteca estándar de Python, como la biblioteca requests
.
Diferencias fundamentales entre la recuperación de URL y las bibliotecas estándar de Python
El límite de tamaño y las cuotas de las solicitudes que controla la recuperación de URL son diferentes al límite de tamaño y las cuotas de las solicitudes que no se controlan mediante la recuperación de URL.
Con la recuperación de URL, cuando tu aplicación envía una solicitud a otra aplicación de App Engine, la recuperación de URL agrega el encabezado de la solicitud
X-Appengine-Inbound-Appid
para confirmar la identidad de la aplicación. La app que recibe la solicitud puede usar la identidad para determinar si debe procesarla.Este encabezado solo está disponible en solicitudes que se envían desde tu aplicación si usa la recuperación de URL. App Engine quita el encabezado si tú o un tercero lo agregan a una solicitud.
Para obtener información sobre cómo confirmar y verificar la identidad sin usar la recuperación de URL, consulta Migra la identidad de la app a tokens de ID de OIDC.
Para ver un ejemplo de cómo usar el encabezado de solicitud a fin de verificar la identidad de la aplicación que realiza la llamada cuando se envían solicitudes entre aplicaciones de App Engine, consulta el ejemplo de solicitud de App Engine a App Engine.
Podrías usar la recuperación de URL para establecer un tiempo de espera predeterminado en todas las solicitudes. La mayoría de las bibliotecas de Python 3, como
requests
yurllib
, establecen el tiempo de espera predeterminado enNone
, por lo que debes actualizar cada solicitud que realice el código para especificar un tiempo de espera.
Descripción general del proceso de migración
Si la app usa las API de recuperación de URL para realizar solicitudes, actualiza tu código a fin de usar una biblioteca de Python estándar en su lugar. Te recomendamos que especifiques un tiempo de espera para cada solicitud.
Prueba tus solicitudes salientes en el servidor de desarrollo local.
Configura la aplicación para omitir la recuperación de URL cuando se ejecute en App Engine.
Implementa la app.
Reemplaza las API de recuperación de URL por una biblioteca de Python
Si todavía no usas una biblioteca estándar de Python para emitir solicitudes salientes, elige una biblioteca y agrégala a las dependencias de tu app.
Por ejemplo, para usar la biblioteca de solicitudes, crea un archivo
requirements.txt
en la misma carpeta que tu archivoapp.yaml
y agrega la siguiente línea:requests==2.24.0
Para la compatibilidad con Python 2, te recomendamos fijar la biblioteca
requests
en la versión 2.24.0. Cuando implementes la app, App Engine descargará todas las dependencias que se definen en el archivorequirements.txt
.Para el desarrollo local, te recomendamos que instales dependencias en un entorno virtual, como venv.
Busca cualquier código para usar el módulo
google.appengine.api.urlfetch
y actualízalo a fin de usar la biblioteca de Python.
Realiza solicitudes HTTPS simples
En el siguiente ejemplo, se muestra cómo realizar una solicitud HTTPS estándar mediante la biblioteca requests
:
Realiza solicitudes HTTPS asíncronas
En el siguiente ejemplo, se muestra cómo realizar una solicitud HTTPS asíncrona mediante la biblioteca requests
:
Pruebas locales
Si actualizaste alguna de tus solicitudes salientes, ejecuta la aplicación en el servidor de desarrollo local y confirma que las solicitudes se realicen de forma correcta.
Omite la recuperación de URL
Para evitar que la recuperación de URL controle las solicitudes cuando implementas la app en App Engine, haz lo siguiente:
En tu archivo
app.yaml
, configura la variable de entornoGAE_USE_SOCKETS_HTTPLIB
en cualquier valor. El valor puede ser cualquier valor, incluida una string vacía. Por ejemplo:env_variables: GAE_USE_SOCKETS_HTTPLIB : ''
Si habilitaste la recuperación de URL para controlar las solicitudes enviadas desde la biblioteca
requests
, puedes quitar las solicitudesAppEngineAdapter
de tu app.Por ejemplo, quita
requests_toolbelt.adapters.appengine
de tu archivoappengine_config.py
yrequests_toolbelt.adapters.appengine.monkeypatch()
de tus archivos de Python.
Ten en cuenta que, incluso si omites la recuperación de URL como se describe en los pasos anteriores, tu aplicación puede seguir usando la API de recuperación de URL directamente.
Implementa tu app
Cuando estés listo para implementar tu app, debes hacer lo siguiente:
-
Consulta la página Cuotas de App Engine en Google Cloud Console para confirmar que la app no realiza llamadas a la API de recuperación de URL.
Si la app se ejecuta sin errores, usa la división de tráfico a fin de aumentar de forma gradual el tráfico de tu app actualizada. Supervisa la app para detectar cualquier problema antes de enrutar más tráfico a la app actualizada.