Emitir solicitudes HTTP(S)

ID de región

REGION_ID es un código abreviado que Google asigna en función de la región que eliges cuando creas la app. El código no corresponde a un país ni a una provincia, aunque algunos ID de región puedan parecer similares a los códigos de país y provincia que se suelen usar. En el caso de las apps creadas después de febrero de 2020, REGION_ID.r se incluye en las URL de App Engine. En el caso de las apps existentes creadas antes de esta fecha, el ID de región es opcional en la URL.

Obtén más información acerca de los ID de región.

Esta página describe cómo emitir solicitudes HTTP(S) desde tu aplicación de App Engine.

App Engine usa el servicio de recuperación de URL para emitir solicitudes HTTP(S) salientes. Para obtener más información sobre cuáles son los límites de tamaño de las solicitudes y qué encabezados se envían en una solicitud de recuperación de URL, consulta Solicitudes salientes.

Cómo emitir una solicitud HTTP

El lenguaje PHP proporciona varias funciones para hacer solicitudes HTTP remotas. Estas se implementan de distintas formas en Google App Engine y están sujetas a distintas cuotas y costos:

  • Controladores de transmisión: Los controladores de transmisión nativos PHP http:// y https:// están configurados para usar el servicio de recuperación de URL de App Engine a fin de realizar solicitudes HTTP. Muchas funciones de PHP como file_get_contents() usan controladores de transmisión de forma indirecta y, por lo tanto, también usan el servicio de recuperación de URL.
  • Extensión cURL: La extensión cURL usa el servicio de Sockets. Debes habilitar la extensión cURL en el archivo php.ini de tu aplicación, al igual que la facturación para tu proyecto.
  • cURL “lite”: cURL “lite” es una versión proporcionada por Google de la biblioteca cURL que usa el servicio de recuperación de URL en lugar del servicio de Sockets. Debes habilitar cURL “lite” en el archivo php.ini de tu aplicación. Los siguientes métodos de extensión cURL no son compatibles:
    • curl_multi_* funciones
    • compatibilidad con protocolos no estándar
    • compatibilidad con puertos distintos a 80 (HTTP) o 443 (HTTPS)

Decidir si usar cURL, cURL Lite, o wrappers de flujo depende en gran medida de tu aplicación y de lo que prefieras. Si no estás seguro, usa la biblioteca HTTP Guzzle. Guzzle proporciona una capa de abstracción para las solicitudes HTTP, que te permite cambiar el servicio subyacente sin volver a escribir el código de la aplicación.

Controladores de transmisión

Los controladores de transmisión 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 a fin de usar las funciones cURL para las solicitudes salientes. cURL “lite” usa el servicio de recuperación de URL, mientras que cURL usa la API de 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

Según la configuración predeterminada, Guzzle usa el controlador de transmisión de PHP, pero usará un controlador cURL de manera automática en caso de que cURL o cURL “lite” esté habilitado.

$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);

Cómo configurar el tiempo de espera de una solicitud

Usa la opción timeout en el contexto HTTP para modificar el plazo.

Inhabilita los redireccionamientos

Si usas la recuperación de URL, el servicio de recuperación de URL subyacente sigue hasta cinco redireccionamientos de forma predeterminada. Estos redireccionamientos podrían reenviar información sensible, como los encabezados de autorización, al destino redireccionado. Si tu app no requiere redireccionamientos HTTP, se recomienda que los inhabilites.

Para indicarle al servicio de recuperación de URLs que no siga los redireccionamientos, tu app debe establecer el parámetro follow_location en las opciones de contexto HTTP en false.

Emite una solicitud HTTPS

Consulta Cómo emitir una solicitud HTTP, que se encuentra más arriba.

Cómo inhabilitar la validación del certificado del host

Según la configuración predeterminada, la implementación de App Engine del wrapper HTTPS intenta validar el certificado del host y rechaza las solicitudes en las que el certificado no coincida. Si deseas inhabilitar este comportamiento, establece el valor de verify_peer como false en las opciones de contexto de SSL/TLS.

Emite una solicitud dirigida a otra app de App Engine

Cuando se emite una solicitud a otra app de App Engine, la tuya debe afirmar su identidad; para eso, se agrega el encabezado X-Appengine-Inbound-Appid a la solicitud. Si le indicas al servicio de recuperación de URL que no siga los redireccionamientos, App Engine agregará este encabezado a las solicitudes de manera automática.

Consulta Inhabilita redireccionamientos para obtener más orientación.

¿Qué sigue?

Obtén más información sobre el servicio de recuperación de URL, como los encabezados que se envían en una solicitud de recuperación de URL, en Solicitudes de salida.