送信リクエスト

このページでは、App Engine アプリケーションが URL 取得サービスを使用して HTTP / HTTPS リクエストを送信し、レスポンスを受信する方法を説明します。App Engine アプリケーションから HTTP / HTTPS リクエストを送信するコードのサンプルについては、HTTP(S) リクエストの送信をご覧ください。

リクエスト

App Engine は、URL 取得サービスを使用して、送信リクエストを発行します。Python では、httpliburlliburllib2 ライブラリを使用して、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 ヘッダーを追加できます。POSTPUTPATCH リクエストにはペイロードを追加できます。

リクエストのプロキシ

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 に設定されると、自動的に追加されます。

リクエストのタイムアウト

リクエストの期限(タイムアウト)を設定できます。デフォルトのタイムアウトは 5 秒に設定されています。

同期リクエストと非同期リクエストの両方を送信できます。次の動作が 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 Platform Console の [割り当ての詳細] タブで確認できます。

また、URL 取得サービスの使用には、以下の制限も適用されます。

制限
リクエスト サイズ 10 MB
リクエスト ヘッダーのサイズ 16 KB(ヘッダーで指定可能な URL の最大長)
レスポンス サイズ 32 MB

次のステップ

HTTP(S) リクエストの発行の説明に沿ってコードサンプルを実行し、アプリケーションからリクエストを発行します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python の App Engine スタンダード環境