ID de región
El REGION_ID es un código abreviado que Google asigna en función de la región que selecciones al crear tu aplicación. El código no corresponde a un país o provincia, aunque algunos IDs de región pueden parecerse a los códigos de país y provincia que se usan habitualmente. En las aplicaciones creadas después de febrero del 2020, REGION_ID.r se incluye en las URLs de App Engine. En las aplicaciones creadas antes de esa fecha, el ID de región es opcional en la URL.
En esta página se describe cómo enviar solicitudes HTTP(S) desde tu aplicación de App Engine con el servicio de obtención de URLs para los tiempos de ejecución de segunda generación.
Antes de seguir las instrucciones de esta página, te recomendamos que uses soluciones idiomáticas de lenguaje para enviar solicitudes HTTP(S) antes de usar el servicio de obtención de URLs. El caso de uso principal de la obtención de URLs es cuando quieres enviar solicitudes HTTP(S) a otra aplicación de App Engine y afirmar la identidad de tu aplicación en esa solicitud.
Para obtener información sobre los límites de tamaño de las solicitudes y los encabezados que se envían en una solicitud de obtención de URL, consulta Solicitudes salientes.
Enviar una solicitud HTTP
Para usar el servicio de obtención de URL para enviar solicitudes HTTP(S) salientes, llama a la biblioteca urlfetch.
Para enviar una solicitud HTTP saliente, usa cualquiera de las siguientes bibliotecas:
- Para mejorar la portabilidad del código, usa la biblioteca estándar de Python
urllib.requestpara enviar solicitudes HTTP. - Usa una biblioteca de terceros, como
requests. Llama explícitamente a la biblioteca
urlfetchy usa el métodourlfetch.fetch.
urllib.request
Importa la biblioteca urllib.request:
import urllib.request
A continuación, usa urllib.request para hacer la solicitud GET:
url = 'http://www.google.com/humans.txt'
try:
result = urllib.request.urlopen(url)
self.response.write(result.read())
except urllib.error.URLError:
logging.exception('Caught exception fetching url')
urlfetch
En los siguientes fragmentos se muestra cómo realizar una solicitud HTTP GET básica con urlfetch. Primero, importa la biblioteca urlfetch del SDK de App Engine:
Usa urlfetch para realizar la solicitud GET:
En el siguiente fragmento se muestra cómo hacer una solicitud más avanzada, enviando datos de un formulario web a través de una solicitud HTTP POST mediante urlfetch:
Definir un tiempo de espera de las solicitudes
Ajusta el plazo predeterminado con la función urlfetch.set_default_fetch_deadline(). Esta función almacena el nuevo plazo predeterminado en una variable local del subproceso, por lo que debe definirse para cada solicitud (por ejemplo, en un middleware personalizado).
Inhabilitar redirecciones
Si usas URL Fetch, el servicio subyacente de URL Fetch sigue hasta cinco redirecciones de forma predeterminada. Estas redirecciones podrían reenviar información sensible, como encabezados de autorización, al destino de la redirección. Si tu aplicación no requiere redirecciones HTTP, te recomendamos que las inhabilites.
Para indicar al servicio de obtención de URLs que no siga las redirecciones, asigna el valor False al parámetro follow_redirects del método fetch.
Emitir una solicitud HTTPS
De forma predeterminada, el servicio URL Fetch subyacente valida el certificado del host con el que se pone en contacto y rechaza las solicitudes si el certificado no coincide. No es necesario que protejas explícitamente tu solicitud.
Enviar una solicitud asíncrona
Las solicitudes HTTP(S) son síncronas de forma predeterminada. Para enviar una solicitud asíncrona, tu aplicación debe hacer lo siguiente:
- Crea un objeto RPC con
urlfetch.create_rpc(). Este objeto representa tu llamada asíncrona en llamadas de método posteriores. - Llama al
urlfetch.make_fetch_call()para hacer la solicitud. Este método usa tu objeto RPC y la URL del destino de la solicitud como parámetros. - Llama al método
get_result()del objeto RPC. Este método devuelve el objeto de resultado si la solicitud se realiza correctamente y genera una excepción si se produce un error durante la solicitud.
En los siguientes fragmentos se muestra cómo hacer una solicitud asíncrona básica desde una aplicación de Python. Primero, importa la biblioteca urlfetch del SDK de App Engine:
A continuación, usa urlfetch para hacer la solicitud asíncrona:
Definir un tiempo de espera de las solicitudes
Para definir un tiempo de espera para tu solicitud, define el parámetro deadline del método urlfetch.create_rpc() al crear tu objeto RPC.
Usar una función de retrollamada
Puedes definir una función de retrollamada para tu objeto RPC. Se llamará a la función cuando tu aplicación llame a un método del objeto (como wait(), checksuccess() o get_result()) que haga que el objeto espere a que se complete la solicitud.
Para usar una función de retrollamada que gestione el resultado de tu llamada de obtención, haz lo siguiente:
- Crea una función auxiliar para definir el ámbito de la devolución de llamada.
- Crea una función de controlador para gestionar el resultado de tu llamada de obtención.
- Asigna el atributo
callbackdel objeto RPC a la función auxiliar.
En el siguiente fragmento se muestra cómo invocar una función de retrollamada:
Enviar una solicitud a otra aplicación de App Engine
Cuando se usa URL Fetch para enviar una solicitud a otra aplicación de App Engine, la aplicación puede afirmar su identidad añadiendo el encabezado X-Appengine-Inbound-Appid a la solicitud.
Si le indicas al servicio de obtención de URLs que no siga las redirecciones, App Engine añadirá automáticamente este encabezado a las solicitudes. Consulta Inhabilitar redirecciones para obtener información sobre cómo inhabilitar redirecciones.
Siguientes pasos
Consulta información sobre el servicio de obtención de URLs, como los encabezados que se envían en una solicitud de obtención de URLs en Solicitudes salientes.