Emitir pedidos HTTP(S)

ID da região

O REGION_ID é um código abreviado que a Google atribui com base na região que seleciona quando cria a sua app. O código não corresponde a um país ou uma província, embora alguns IDs de regiões possam parecer semelhantes aos códigos de países e províncias usados frequentemente. Para apps criadas após fevereiro de 2020, REGION_ID.r está incluído nos URLs do App Engine. Para apps existentes criadas antes desta data, o ID da região é opcional no URL.

Saiba mais acerca dos IDs de regiões.

Esta página descreve como emitir pedidos HTTP(S) a partir da sua app do App Engine.

Para ver detalhes sobre os limites de tamanho dos pedidos e os cabeçalhos enviados num pedido de obtenção de URL, consulte Pedidos de saída.

Emitir um pedido HTTP

Para emitir um pedido HTTP de saída, use o pacote http como habitualmente, mas crie o cliente com urlfetch.Client. urlfetch.Client devolve um *http.Client que usa urlfetch.Transport, que é uma implementação da interface http.RoundTripper que faz pedidos através da API URL Fetch.

O fragmento seguinte demonstra como fazer um pedido HTTP GET básico:

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/urlfetch"
)

func handler(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	client := urlfetch.Client(ctx)
	resp, err := client.Get("https://www.google.com/")
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	fmt.Fprintf(w, "HTTP GET returned status %v", resp.Status)
}

Desative os redirecionamentos

Se estiver a usar a obtenção de URL, o serviço de obtenção de URL subjacente segue até cinco redirecionamentos por predefinição. Estes redirecionamentos podem encaminhar informações confidenciais, como cabeçalhos de autorização, para o destino redirecionado. Se a sua app não requerer redirecionamentos HTTP, recomendamos que os desative.

Para indicar ao serviço URL Fetch que não siga os redirecionamentos, defina o campo CheckRedirect do objeto http.Client devolvido pelo pacote urlfetch para devolver http.ErrUseLastResponse. Isto aplica-se ao appengine/urlfetch e ao appengine/v2/urlfetch. Por exemplo:

client := urlfetch.Client(ctx)
client.CheckRedirect = func(*http.Request, []*http.Request) error {
  return http.ErrUseLastResponse
}

Emitir um pedido HTTPS

Por predefinição, o serviço URL Fetch subjacente valida o certificado do anfitrião que contacta e rejeita pedidos se o certificado não corresponder. Não precisa de proteger explicitamente o seu pedido.

Desative a validação de certificados de anfitrião

Para desativar a validação automática do certificado do anfitrião, pode criar manualmente um Transport e definir AllowInvalidServerCertificate como true.

Emitir um pedido para outra app do App Engine

Quando emite um pedido para outra app do App Engine, a sua app do App Engine tem de afirmar a sua identidade adicionando o cabeçalho X-Appengine-Inbound-Appid ao pedido. Se instruir o serviço URL Fetch para não seguir redirecionamentos, o App Engine adiciona este cabeçalho aos pedidos automaticamente.

Consulte o artigo Desativar redirecionamentos para obter orientações sobre como desativar redirecionamentos.

O que se segue?

Saiba mais sobre o serviço de obtenção de URL, como os cabeçalhos que são enviados num pedido de obtenção de URL em Pedidos de saída.