Como emitir solicitações HTTP(S)

ID de região

O REGION_ID é um código abreviado que o Google atribui com base na região que você selecionou ao criar o aplicativo. O código não corresponde a um país ou estado, ainda que alguns IDs de região sejam semelhantes aos códigos de país e estado geralmente usados. Para apps criados após fevereiro de 2020, o REGION_ID.r está incluído nos URLs do App Engine. Para apps existentes criados antes dessa data, o ID da região é opcional no URL.

Saiba mais sobre IDs de região.

Esta página descreve como emitir solicitações HTTP(S) do seu aplicativo App Engine.

O App Engine usa o serviço de busca de URL para emitir solicitações HTTP(S) de saída. Para mais detalhes sobre os limites de tamanho de solicitação e quais cabeçalhos são enviados em uma solicitação de busca de URL, consulte Solicitações de saída.

Como emitir uma solicitação HTTP

A linguagem PHP oferece várias funções para fazer solicitações HTTP remotas. Elas são implementadas de diferentes maneiras no Google App Engine e estão sujeitas a várias cotas e custos:

  • Gerenciadores de stream: os manipuladores de stream nativo http:// e https:// do PHP são configurados para usar o serviço de busca de URL do App Engine para fazer solicitações HTTP. Muitas funções do PHP, como file_get_contents(), usam os gerenciadores de stream indiretamente. Portanto, também usam o serviço de busca de URL.
  • Extensão cURL: a extensão cURL usa o serviço de soquetes. A extensão cURL precisa estar ativada no arquivo php.ini do aplicativo. Além disso, é necessário que o faturamento esteja ativado para o projeto.
  • cURL "lite": o cURL "lite" é uma versão da biblioteca cURL fornecida pelo Google que usa o serviço de busca de URL em vez do serviço de soquetes. Ative o cURL "lite" no arquivo php.ini do seu aplicativo. Os seguintes métodos da extensão cURL não são compatíveis:
    • Funções curl_multi_*
    • suporte a protocolos não padrão
    • suporte a outras portas, além da 80 (HTTP) ou 443 (HTTPS)

A decisão entre usar cURL, cURL Lite ou wrappers de stream depende muito do aplicativo e de sua preferência. Se você não tem certeza, use a biblioteca HTTP do Guzzle. O Guzzle oferece uma camada de abstração para solicitações HTTP, o que permite alterar o serviço subjacente sem reescrever o código do aplicativo.

Gerenciadores de stream

Os gerenciadores de stream HTTP(S) padrão são usados em funções PHP integradas, como fopen() e 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 e cURL "lite"

Ative o cURL ou o cURL "lite" no php.ini para usar as funções do cURL nas solicitações de saída. O cURL "lite" usa o serviço de busca de URL, enquanto o cURL usa a 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

Por padrão, o Guzzle usa o gerenciador de stream do PHP, mas usará automaticamente um gerenciador do cURL, se cURL ou cURL "lite" for ativado.

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

Como definir um tempo limite de solicitação

Use a opção timeout em Contexto HTTP para alterar o prazo.

Como desativar redirecionamentos

Se você estiver usando a busca de URL, o serviço subjacente de busca de URL seguirá até cinco redirecionamentos por padrão. Esses redirecionamentos podem encaminhar informações confidenciais, como cabeçalhos de autorização, para o destino redirecionado. Se o aplicativo não exigir redirecionamentos HTTP, é recomendável que você os desative.

Para instruir o serviço de busca de URL a não seguir redirecionamentos, seu aplicativo precisa definir o parâmetro follow_location nas Opções de contexto HTTP para false.

Como emitir solicitações HTTPS

Consulte Como emitir uma solicitação HTTP acima.

Como desativar a validação do certificado do host

Por padrão, a implementação do wrapper HTTPS do App Engine tenta validar o certificado do host e rejeita as solicitações em que o certificado não corresponde. Para desativar esse comportamento, defina o valor de verify_peer como false nas opções de contexto SSL/TLS.

Como emitir solicitações para outro aplicativo do App Engine

Ao emitir uma solicitação para outro aplicativo do App Engine, ele precisa declarar a identidade dele adicionando o cabeçalho X-Appengine-Inbound-Appid à solicitação. Se você instruir o serviço de busca de URL a não seguir redirecionamentos, o App Engine adicionará esse cabeçalho às solicitações automaticamente.

Consulte Como desativar redirecionamentos para orientação sobre como desativar redirecionamentos.

A seguir

Para saber mais sobre o serviço de busca de URL, como os cabeçalhos que são enviados em uma solicitação de busca de URL, consulte Solicitações de saída.