リージョン 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 取得リクエストで送信されるヘッダーの詳細については、送信リクエストをご覧ください。
HTTP リクエストの発行
URL 取得サービスを使用してアウトバウンド HTTP(S) リクエストを発行するには、明示的に urlfetch
ライブラリを呼び出す必要があります。
アウトバウンド HTTP リクエストを発行するには、次のいずれかのライブラリを使用します。
- コードの移植性を高めるために、Python 標準ライブラリ
urllib.request
を使用して HTTP リクエストを発行する。 requests
などのサードパーティ ライブラリを使用します。urlfetch
ライブラリを明示的に呼び出し、urlfetch.fetch
メソッドを使用します。
urllib.request
urllib.request
ライブラリをインポートします。
import urllib.request
次に urllib.request
を使用して、GET
リクエストを実行します。
url = 'http://www.google.com/humans.txt'
try:
result = urllib.request.urlopen(url)
self.response.write(result.read())
except urllib.error.URLError:
logging.exception('Caught exception fetching url')
urlfetch
次のスニペットは、urlfetch
を使用して基本的な HTTP GET
リクエストを実行する方法を示しています。まず、App Engine SDK から urlfetch
ライブラリをインポートします。
次に urlfetch
を使用して、GET
リクエストを実行します。
次のスニペットは、urlfetch
を使用して HTTP POST
リクエストでウェブフォームからデータを送信する、より高度なリクエストの実行方法を示しています。
リクエストのタイムアウトの設定
デフォルトの期限は、urlfetch.set_default_fetch_deadline()
関数を使って変更できます。この関数は、スレッド ローカルの変数に新しいデフォルトの期限を保存します。たとえば、カスタム ミドルウェアでは、この変数をリクエストごとに設定する必要があります。
リダイレクトの無効化
URL 取得を使用している場合、基本の URL 取得サービスはデフォルトで最大 5 回のリダイレクトを行います。これらのリダイレクトでは、認証ヘッダーなどの機密情報がリダイレクト先に転送される可能性があります。アプリで HTTP リダイレクトが不要な場合は、リダイレクトを無効にすることをおすすめします。
リダイレクトを実行しないように URL 取得サービスに指示するには、fetch
メソッドの follow_redirects
パラメータを False
に設定します。
HTTPS リクエストの発行
HTTPS リクエストを発行するには、urlfetch.fetch()
メソッドを呼び出すときに validate_certificate
パラメータを true
に設定します。
非同期リクエストの発行
HTTP(S) リクエストはデフォルトで同期されます。非同期リクエストを発行するには、アプリケーションで次の処理を行う必要があります。
urlfetch.create_rpc()
を使用して新しい RPC オブジェクトを作成します。このオブジェクトは、後続のメソッド呼び出しでの非同期呼び出しを表します。urlfetch.make_fetch_call()
を呼び出して、リクエストを送信します。このメソッドは、RPC オブジェクトとリクエストのターゲット URL をパラメータとして取得します。- RPC オブジェクトの
get_result()
メソッドを呼び出します。リクエストに成功すると、このメソッドは結果オブジェクトを返します。リクエスト中にエラーが発生した場合には、例外が発生します。
以下のスニペットでは、Python アプリケーションから基本的な非同期リクエストを行います。まず、App Engine SDK から urlfetch
ライブラリをインポートします。
次に、urlfetch
を使用して非同期リクエストを行います。
リクエストのタイムアウトの設定
リクエストのタイムアウトを設定するには、RPC オブジェクトを作成するときに urlfetch.create_rpc()
メソッドの deadline
パラメータを設定します。
コールバック関数の使用
RPC オブジェクトにコールバック関数を定義します。この関数は、アプリケーションがオブジェクトのメソッド(wait()
、checksuccess()
、get_result()
など)を呼び出し、リクエストの完了を待つときに呼び出されます。
フェッチ呼び出しの結果を処理するコールバック関数を使用するには:
- コールバックのスコープを定義するヘルパー関数を作成します。
- フェッチ呼び出しの結果を処理するハンドラ関数を作成します。
- RPC オブジェクトの
callback
属性にヘルパー関数を設定します。
以下のスニペットでは、コールバック関数を呼び出します。
別の App Engine アプリケーションへのリクエストの発行
URL 取得を使用して別の App Engine アプリにリクエストを発行する場合は、アプリでヘッダー X-Appengine-Inbound-Appid
をリクエストに追加して、その ID を表明できます。
URL 取得サービスにリダイレクトを実行しないよう指示する場合、App Engine はこのヘッダーをリクエストに自動的に追加します。 リダイレクトの無効化に関するガイダンスについては、リダイレクトの無効化を参照してください。
次のステップ
送信リクエスト内の URL 取得リクエストで送信されるヘッダーなど、URL 取得サービスについて学習する。