Emitir solicitudes HTTP(S)

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.

Más información sobre los IDs de región

En esta página se describe cómo enviar solicitudes HTTP(S) desde tu aplicación de App Engine.

App Engine usa el servicio de obtención de URLs para enviar solicitudes HTTP(S) salientes. 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

El lenguaje PHP proporciona varias funciones para hacer solicitudes HTTP remotas. Se implementan de diferentes formas en Google App Engine y están sujetas a diferentes cuotas y costes:

  • Gestores de flujo: los gestores de flujo nativos http:// y https:// de PHP se configuran para usar el servicio de obtención de URLs de App Engine para hacer solicitudes HTTP. Muchas funciones de PHP, como file_get_contents(), usan controladores de flujo de forma indirecta y, por lo tanto, también usan el servicio URL Fetch.
  • Extensión cURL: la extensión cURL usa el servicio Sockets. La extensión cURL debe estar habilitada en el archivo php.ini de tu aplicación y la facturación debe estar habilitada en tu proyecto.
  • cURL "lite": cURL "lite" es una versión de la biblioteca cURL proporcionada por Google que usa el servicio de obtención de URLs en lugar del servicio de sockets. Debes habilitar cURL "lite" en el archivo php.ini de tu aplicación. No se admiten los siguientes métodos de la extensión cURL:
    • curl_multi_* funciones
    • Compatibilidad con protocolos no estándar
    • Compatibilidad con puertos distintos de 80 (HTTP) o 443 (HTTPS)

La decisión de usar cURL, cURL Lite o envoltorios de flujo depende en gran medida de tu aplicación y tus preferencias. Si no lo tienes claro, usa la biblioteca HTTP Guzzle. Guzzle proporciona una capa de abstracción para las solicitudes HTTP, lo que te permite cambiar el servicio subyacente sin tener que reescribir el código de la aplicación.

Gestores de flujo

Los controladores de flujo HTTP(S) estándar se usan en funciones de PHP integradas, como fopen() y file_get_contents().

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = "accept: */*\r\n" .
    "Content-Type: application/x-www-form-urlencoded\r\n" .
    "Custom-Header: custom-value\r\n" .
    "Custom-Header-Two: custom-value-2\r\n";

$context = [
    'http' => [
        'method' => 'POST',
        'header' => $headers,
        'content' => http_build_query($data),
    ]
];
$context = stream_context_create($context);
$result = file_get_contents($url, false, $context);

cURL y cURL "lite"

Habilita cURL o cURL "lite" en php.ini para usar las funciones de cURL en las solicitudes salientes. cURL "lite" usa el servicio de obtención de URLs, mientras que cURL usa la API Sockets.

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = [
    'Accept: */*',
    'Content-Type: application/x-www-form-urlencoded',
    'Custom-Header: custom-value',
    'Custom-Header-Two: custom-value-2'
];

// open connection
$ch = curl_init();

// set curl options
$options = [
    CURLOPT_URL => $url,
    CURLOPT_POST => count($data),
    CURLOPT_POSTFIELDS => http_build_query($data),
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
];
curl_setopt_array($ch, $options);

// execute
$result = curl_exec($ch);

// close connection
curl_close($ch);

Guzzle

De forma predeterminada, Guzzle usa el controlador de flujo de PHP, pero usará automáticamente un controlador cURL si cURL o cURL "lite" están habilitados.

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = [
    'Accept' => '*/*',
    'Content-Type' => 'application/x-www-form-urlencoded',
    'Custom-Header' => 'custom-value',
    'Custom-Header-Two' => 'custom-value',
];

$guzzle = new GuzzleHttp\Client;
$request = new GuzzleHttp\Psr7\Request('POST', $url, $headers, http_build_query($data));
$result = $guzzle->send($request);

Definir un tiempo de espera de las solicitudes

Usa la opción timeout en Contexto HTTP para modificar la fecha límite.

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, tu aplicación debe definir el parámetro follow_location en las opciones de contexto HTTP como false.

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.

Inhabilitar la validación de certificados de host

De forma predeterminada, la implementación de App Engine del envoltorio HTTPS intenta validar el certificado del host y rechaza las solicitudes en las que el certificado no coincide. Para inhabilitar este comportamiento, defina el valor de verify_peer en false en las opciones de contexto de SSL/TLS.

Enviar una solicitud a otra aplicación de App Engine

Cuando envíes una solicitud a otra aplicación de App Engine, tu aplicación de App Engine debe 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.