HTTP(S) リクエストの発行

リージョン ID

REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。

詳しくは、リージョン ID をご覧ください。

このページでは、App Engine アプリから HTTP(S) リクエストを発行する方法について説明します。

リクエスト サイズの上限と URL 取得リクエストで送信されるヘッダーの詳細については、送信リクエストをご覧ください。

HTTP リクエストの発行

送信 HTTP リクエストを発行するには、通常どおり http パッケージを使用しますが、クライアントを作成するには urlfetch.Client を使用します。urlfetch.Client は、urlfetch.Transport を使用する *http.Client を返します。これは http.RoundTripper インターフェースの実装であり、URL Fetch API を使用してリクエストが行われます。

以下のスニペットでは、基本的な 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 取得を使用している場合、基本の URL 取得サービスはデフォルトで最大 5 回のリダイレクトを行います。これらのリダイレクトでは、認証ヘッダーなどの機密情報がリダイレクト先に転送される可能性があります。アプリで HTTP リダイレクトが不要な場合は、リダイレクトを無効にすることをおすすめします。

リダイレクトを実行しないように URL 取得サービスに指示するには、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 では、リクエストを明示的に保護する必要はありません。基盤となっている URL 取得サービスが、デフォルトで接続先ホストの証明書を検証し、証明書が一致しない場合はリクエストを拒否します。

ホスト証明書の検証を無効にする

ホスト証明書の自動検証を無効にするには、トランスポートを手動で作成し、AllowInvalidServerCertificatetrue に設定します。

別の App Engine アプリへのリクエストの発行

別の App Engine アプリにリクエストを発行する場合、App Engine アプリでリクエストにヘッダー X-Appengine-Inbound-Appid を追加して、その ID を表明する必要があります。URL 取得サービスにリダイレクトを実行しないよう指示する場合、App Engine はこのヘッダーをリクエストに自動的に追加します。

リダイレクトの無効化に関するガイダンスについては、リダイレクトの無効化を参照してください。

次のステップ

送信リクエスト内の URL 取得リクエストで送信されるヘッダーなど、URL 取得サービスについて学習する。