リージョン ID
REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
このページでは、第 2 世代ランタイム用の URL 取得サービスを使用して、App Engine アプリから HTTP(S) リクエストを発行する方法について説明します。
このページの手順に沿って操作を行う前に、言語固有のソリューションを使用して HTTP(S) リクエストを発行してから URL 取得サービスを使用することをおすすめします。URL 取得の主なユースケースは、別の App Engine アプリに HTTP(S) リクエストを発行し、そのリクエストでアプリの ID を表明する必要がある場合です。
リクエスト サイズの上限と URL 取得リクエストで送信されるヘッダーの詳細については、アウトバウンド リクエストをご覧ください。
デフォルトでは、Java ランタイムで実行されるアプリケーションは、java.net.HttpURLConnection などの HTTP(S) リクエストに標準の Java クラスを使用します。他の Java アプリケーションの場合と同じように、リクエストを送信します。
標準ランタイム ネットワーク クラスを使用する
標準の Java ネットワーク クラスを使用する場合、アプリは次の機能にアクセスできます。
- リクエスト データに設定されている 32 MB の制限は適用されません。
- HTTP 2.0 をサポートします。
- Java 用 Cloud クライアント ライブラリからアクセス可能な Google Cloudベースの API をすべてサポートします。
URL 取得を使用する
Java アプリで URL 取得を使用する場合は、appengine-web.xml に次の行を追加します。
<url-stream-handler>urlfetch</url-stream-handler>
例:
<xml version="1.0" encoding="utf-8">
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<!-- ... -->
<url-stream-handler>urlfetch</url-stream-handler>
<!-- ... -->
</appengine-web-app>
HTTP リクエストを発行する
URL 取得サービスを使用してアウトバウンド HTTP(S) リクエストを発行するには、java.net.URLConnection を使用します。
以下のスニペットでは、基本的な HTTP GET リクエストを実行します。アプリケーションは新しい URL オブジェクトを作成し、次にオブジェクトの openStream() メソッドを呼び出して、その URL のコンテンツを取得します。
高度なリクエストの場合は、次のように java.net.HttpURLConnection を使用します。
- 新しい
URLオブジェクトを作成します。 URLオブジェクトのopenConnection()メソッドを呼び出して。新しいURLConnectionオブジェクトを作成します。HttpURLConnectionオブジェクト型にURLConnectionオブジェクトをキャストして新しいHttpURLConnectionオブジェクトを作成します。HttpURLConnectionオブジェクトのリクエスト メソッドを設定します。- リクエストの出力ストリームを作成します。
- リクエストのペイロードをストリームに書き込みます。
- ストリームを閉じます。
次のスニペットは、HttpURLConnection を使用してより高度なリクエストを実行し、PUT リクエストを使用してウェブフォームからデータを送信する方法を示しています。
リクエスト タイムアウトを設定する
URL 取得を使用する場合は、appengine-web.xml ファイルの appengine.api.urlfetch.defaultDeadline 設定を使用して、リクエストのデフォルト期限を調整します。
ヘッダーを設定する
URL 取得を使用している場合は、HttpURLConnection オブジェクトの setRequestProperty() メソッドを呼び出して、送信リクエストに HTTP ヘッダーを設定できます。次のスニペットでは、X-MyApp-Version ヘッダーを 2.7.3 に設定しています。
conn.setRequestProperty("X-MyApp-Version", "2.7.3");
リダイレクトを無効にする
デフォルトでは、HttpURLConnection は HTTP リダイレクトに従います。
URL 取得を使用している場合、基本の URL 取得サービスはデフォルトで最大 5 回のリダイレクトを行います。これらのリダイレクトでは、認証ヘッダーなどの機密情報がリダイレクト先に転送される可能性があります。アプリで HTTP リダイレクトが不要な場合は、リダイレクトを無効にすることをおすすめします。
この動作を無効にするには、HttpURLConnection オブジェクトの setInstanceFollowRedirects() メソッドに値 false を渡します。
conn.setInstanceFollowRedirects(false);
アプリで java.net ではなく基礎となる urlfetch パッケージを直接使用する場合は、アプリで doNotFollowRedirects を指定する必要があります。
HTTPS リクエストを発行する
デフォルトでは、基盤となっている URL 取得サービスが接続先ホストの証明書を検証し、証明書が一致しない場合はリクエストを拒否します。リクエストを明示的に保護する必要はありません。
非同期リクエストを発行する
HTTP(S) リクエストはデフォルトで同期されます。非同期リクエストを発行するには、アプリケーションで URLFetchService の fetchAsync() メソッドを使用する必要があります。このメソッドは java.util.concurrent.Future<HTTPResponse> を返します。
別の App Engine アプリにリクエストを発行する
URL 取得を使用して別の App Engine アプリにリクエストを発行する場合は、アプリでヘッダー X-Appengine-Inbound-Appid をリクエストに追加して、その ID を表明できます。
URL 取得サービスにリダイレクトを実行しないよう指示する場合、App Engine はこのヘッダーをリクエストに自動的に追加します。リダイレクトの無効化に関するガイダンスについては、リダイレクトの無効化を参照してください。
次のステップ
アウトバウンド リクエスト内の URL 取得リクエストで送信されるヘッダーなど、URL 取得サービスについて学習する。