リージョン 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.UnknownHostException
java.net.SocketTimeoutException
java.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 取得を使用している場合は、urlfetch
パッケージの FetchOptions
クラスを使用して HTTPS リクエストを発行し、validateCertificate()
を呼び出します。
非同期リクエストの発行
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 取得サービスについて学習する。