发出 HTTP(S) 请求

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

详细了解区域 ID

本页介绍如何从 App Engine 应用发出 HTTP(S) 请求。

如需详细了解请求大小限制以及网址提取请求中发送的标头,请参阅出站请求

发出 HTTP 请求

如要发出出站 HTTP 请求,请照常使用 http 软件包,但应使用 urlfetch.Client 创建客户端。urlfetch.Client 返回一个使用 urlfetch.Transport*http.Client,这是 使用 URL Fetch API 发出请求的 http.RoundTripper 接口的实现。

以下代码段演示了如何执行基本 HTTP GET 请求:

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)
}

停用重定向

如果您使用 URL Fetch,则默认情况下,URL Fetch 服务最多遵循五个重定向。这些重定向可能会将敏感信息(如授权标头)转发到重定向的目的地。如果应用不需要 HTTP 重定向,则建议您停用重定向。

如需指示 URL Fetch 服务不遵循重定向,请设置从 urlfetch 软件包返回的 http.ClientCheckRedirect 字段以返回 http.ErrUseLastResponse。 这适用于 appengine/urlfetchappengine/v2/urlfetch。例如:

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

发出 HTTPS 请求

在 Go API 中,您无需明确保护请求。默认情况下,底层网址提取服务会验证它正在联系的主机的证书,如果证书不匹配,则会拒绝请求。

停用主机证书验证

如要停用自动主机证书验证,可以手动创建传输并将 AllowInvalidServerCertificate 设置为 true

向其他 App Engine 应用发出请求

向其他 App Engine 应用发出请求时,您的 App Engine 应用必须通过将标头 X-Appengine-Inbound-Appid 添加到请求中来声明其身份。如果您指示 URL Fetch 服务不遵循重定向,则 App Engine 会自动将此标头添加到请求中。

如需有关如何停用重定向的指导,请参阅停用重定向

后续步骤

参阅出站请求了解 URL Fetch 服务,例如在 URL Fetch 请求中发送的标头。