リージョン ID
REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
このページでは、App Engine アプリから HTTP(S) リクエストを発行する方法について説明します。
デフォルトでは、Java 8 ランタイムで実行されるアプリケーションは、java.net.HttpURLConnection などの HTTP(S) リクエストに標準の Java クラスを使用します。他の Java アプリケーションの場合と同じように、リクエストを送信します。デフォルトの動作を使用するには、アプリケーションの課金を有効にする必要があります。有効にしない場合、次の例外が発生します。
java.net.UnknownHostExceptionjava.net.SocketTimeoutExceptionjava.io.IOException
標準ランタイム ネットワーク クラスの使用
標準の Java ネットワーク クラスを使用する場合、アプリは次の機能にアクセスできます。
- リクエスト データに設定されている 32 MB の制限がなくなります。
- HTTP 2.0 をサポートします。
- Java 用 Google Cloud クライアント ライブラリからアクセス可能な Google Cloud ベースの API をすべてサポートします。
URL 取得の使用
Java 8 アプリで 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 リクエストを発行する
送信 HTTP リクエストを発行するには、java.net.URLConnection を使用します。
以下のスニペットでは、基本的な HTTP GET リクエストを実行します。アプリケーションは新しい URL オブジェクトを作成し、次にオブジェクトの openStream() メソッドを呼び出して、その URL のコンテンツを取得します。
高度なリクエストの場合は、次のように java.net.HttpURLConnection を使用します。
- 新しい
URLオブジェクトを作成します。 URLオブジェクトのopenConnection()メソッドを呼び出して。新しいURLConnectionオブジェクトを作成します。HttpURLConnectionオブジェクト型にURLConnectionオブジェクトをキャストして新しいHttpURLConnectionオブジェクトを作成します。HttpURLConnectionオブジェクトのリクエスト メソッドを設定します。- リクエストの出力ストリームを作成します。
- リクエストのペイロードをストリームに書き込みます。
- ストリームを閉じます。
次のスニペットは、PUT リクエストを経由してウェブフォームからデータを送信し、HttpURLConnection により高度なリクエストを行う方法を示しています。
リクエスト タイムアウトを設定する
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 取得サービスが接続先ホストの証明書を検証し、証明書が一致しない場合はリクエストを拒否します。リクエストを明示的に保護する必要はありません。
ホスト証明書の検証を無効にする
URL 取得でホスト証明書の自動検証を無効にするには、urlfetch パッケージの FetchOptions クラスを使用して HTTPS リクエストを発行し、doNotValidateCertificate() を呼び出します。
非同期リクエストを発行する
HTTP(S) リクエストはデフォルトで同期されます。非同期リクエストを発行するには、アプリケーションで URLFetchService の fetchAsync() メソッドを使用する必要があります。このメソッドは java.util.concurrent.Future<HTTPResponse> を返します。
別の App Engine アプリにリクエストを発行する
別の App Engine アプリにリクエストを発行する場合、App Engine アプリでリクエストにヘッダー X-Appengine-Inbound-Appid を追加して、その ID を表明する必要があります。URL 取得サービスにリダイレクトを実行しないよう指示する場合、App Engine はこのヘッダーをリクエストに自動的に追加します。
リダイレクトの無効化に関するガイダンスについては、リダイレクトの無効化を参照してください。
次のステップ
送信リクエスト内の URL 取得リクエストで送信されるヘッダーなど、URL 取得サービスについて学習する。