このページでは、App Engine アプリケーションが URL 取得サービスを使用して HTTP と HTTPS リクエストを送信し、レスポンスを受信する方法を説明します。App Engine アプリケーションから HTTP / HTTPS リクエストを送信するコードのサンプルについては、HTTP(S) リクエストの送信をご覧ください。
サーバーレス VPC アクセスを設定済みの場合、または Sockets API を使用している場合は、URL 取得でのリクエストの処理を停止する必要があります。URL 取得を使用すると、VPC ネットワークまたは Sockets API へのリクエストは失敗します。URL 取得を無効にすると、標準の Python ライブラリで HTTP リクエストが処理されます。特定のリクエストに対して URL 取得で提供される機能が必要な場合は、そのリクエストに urlfetch
ライブラリを直接使用できます。
リクエスト
App Engine は、URL 取得サービスを使用して、送信リクエストを発行します。Python では、httplib
、urllib
、urllib2
ライブラリを使用して、App Engine アプリケーションで HTTP リクエストを作成します。このようなリクエストは、それぞれのライブラリが URL 取得サービスを使用して実行します。urlfetch
ライブラリを直接使用することもできます。リクエストのプロトコル
アプリケーションは、HTTP または HTTPS のいずれかで URL を取得できます。必要なプロトコルは、ターゲット URL のプロトコルから判断されます。
取得された URL は、以下の範囲内にある任意のポートを使用します。
80
~90
440
~450
1024
~65535
URL にポート番号が含まれていない場合、使用するポートはプロトコルで判断します。HTTP リクエストはポート 80
を使用し、HTTPS リクエストはポート 443
を使用します。
リクエストのメソッド
URL 取得サービスを使用してリクエストを発行する場合、次のいずれかの HTTP メソッドを使用できます。
GET
POST
PUT
HEAD
DELETE
PATCH
リクエストには、HTTP ヘッダーを追加できます。POST
、PUT
、PATCH
リクエストにはペイロードを追加できます。
リクエストのプロキシ
URL 取得サービスは、HTTP/1.1 互換のプロキシを使用して結果を取得することに注意してください。
アプリケーションがリクエストを無限に繰り返さないようにするため、リクエスト ハンドラは自分自身の URL を取得することはできません。他の方法でも無限に再帰する可能性はあります。ユーザーが指定した URL に対するリクエストをアプリケーションで取得する場合には注意してください。
リクエスト ヘッダー
アプリケーションで送信リクエストに HTTP ヘッダーを設定できます。
HTTP POST
リクエストを送信するときに、Content-Type
ヘッダーを明示的に設定しないと、ヘッダーは x-www-form-urlencoded
に設定されます。これは、ウェブフォームで使用されるコンテンツ タイプです。
セキュリティ上の理由から、アプリケーションで次のヘッダーを変更することはできません。
Content-Length
Host
Vary
Via
X-Appengine-Inbound-Appid
X-Forwarded-For
X-ProxyUser-IP
これらのヘッダーには、必要に応じて App Engine が適切な値を設定します。たとえば、App Engine はリクエスト データから Content-Length
ヘッダーを計算し、その結果をリクエストに追加してから送信します。
次のヘッダーは、リクエスト側のアプリのアプリケーション ID を表します。
User-Agent
。このヘッダーは変更可能ですが、サーバーが App Engine のリクエストを識別できるように App Engine が ID 文字列を追加します。追加される文字列の形式は"AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)"
で、APPID
はアプリの識別子です。X-Appengine-Inbound-Appid
。このヘッダーは変更できません。リクエストが URL 取得サービス経由で送信されたときに、リダイレクト パラメータがFalse
に設定されると、自動的に追加されます。
リクエストのタイムアウト
リクエストの期限(タイムアウト)を設定できます。リクエストのデフォルトのタイムアウトは 10 秒に設定されています。
同期リクエストと非同期リクエストの両方を送信できます。次の動作が URL Fetch API に適用されます。
- 同期リクエスト: リモートホストが結果を戻すまで取得呼び出しが待機し、結果を返すと、制御をアプリケーションに戻します。取得呼び出しの最大待機時間を経過すると、例外が発生します。
- 非同期リクエスト: URL 取得サービスはリクエストを開始し、オブジェクトと一緒にすぐに値を返します。URL の取得が完了するまで、アプリケーションは他の作業を行うこともできます。アプリケーションで結果が必要な場合には、オブジェクトでメソッドを呼び出すと、オブジェクトがリクエストの完了を待機し、結果を返します。リクエスト ハンドラの終了時に、URL 取得リクエストが保留中の場合、アプリケーション サーバーは残りのすべてのリクエストを待機します。ユーザーにレスポンスを返す前にタイムアウトが発生する場合もあります。
安全な接続と HTTPS
アプリケーションで、HTTPS を使用して安全なサーバーに接続し、URL を取得することもできます。リクエストとレスポンスのデータは暗号化され、ネットワーク上の送受信されます。
Python API のデフォルトでは、URL 取得プロキシはホストとの接続を検証しません。ホストの検証を有効にするには、オプションの validate_certificate
引数を fetch()
メソッドに追加します。
レスポンス
URL Fetch API を使用する場合、URL 取得サービスは、レスポンス コード、ヘッダー、本文を含むすべてのレスポンス データを返すことに注意してください。
デフォルトでは、URL 取得サービスがリダイレクト コードを含むレスポンスを受信すると、サービスがリダイレクトします。サービスは、最大 5 つまでのリダイレクト レスポンスに対応し、最後のリソースを返します。リダイレクトを実行しないように URL 取得サービスに指示することもできます。その場合、アプリケーションにリダイレクト レスポンスを返します。
開発用サーバーでの URL 取得の使用
パソコン上の App Engine 開発用サーバーでアプリケーションを実行している場合、URL 取得サービスに対する呼び出しはローカルで処理されます。開発用サーバーは、パソコンからリモートホストに直接接続して URL を取得します。この場合、パソコンのネットワーク接続を使用してインターネットにアクセスします。
URL を取得するアプリケーションの機能をテストする場合、パソコンからリモートホストにアクセスします。
URL 取得の割り当てと制限
URL 取得サービスの割り当てについては、割り当てをご覧ください。アプリケーションの現在の割り当て使用量を確認するには、Google Cloud Console の割り当ての詳細ページに移動します。
また、URL 取得サービスの使用には、以下の制限も適用されます。
制限 | 値 |
---|---|
リクエスト サイズ | 10 MB |
リクエスト ヘッダーのサイズ | 16 KB(ヘッダーで指定可能な URL の最大長) |
レスポンス サイズ | 32 MB |
次のステップ
HTTP(S) リクエストの発行の説明に沿ってコードサンプルを実行し、アプリケーションからリクエストを発行する。