お気に入り | 日本語 | ログイン

URL フェッチ Java API 概要

App Engine アプリケーションは、他のアプリケーションと通信したり、URL をフェッチして Web 上の他のリソースにアクセスしたりできます。アプリケーションは URL フェッチ サービスを使用し、HTTP リクエストおよび HTTPS リクエストを発行し、レスポンスを受け取ります。URL フェッチ サービスは、効率とスケーラビリティのために Google のネットワーク インフラストラクチャを使用しています。

java.net での URL フェッチ

java.net.URLConnection および Java 標準ライブラリの関連クラスを使用し、Java アプリケーションからの HTTP および HTTPS 接続を確立できます。App Engine は URL フェッチ サービスを使用しこのインターフェースを実装します。アプリケーションから直接ソケット接続は確立されません。

URL のページを取得する簡単な方法は、java.net.URL を作成しその openStream() メソッドをコールする方法です。このメソッドは接続確立の詳細を処理し、HTTP GET リクエストを発行し応答データを取得します。

import java.net.MalformedURLException;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

// ...
        try {
            URL url = new URL("http://www.example.com/atom.xml");
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;

            while ((line = reader.readLine()) != null) {
                // ...
            }
            reader.close();

        } catch (MalformedURLException e) {
            // ...
        } catch (IOException e) {
            // ...
        }

より高度なリクエストでは、URL オブジェクトの openConnection() メソッドをコールし URLConnection オブジェクト(URL により、HttpURLConnection または HttpsURLConnection)を作成することもできます。リクエストを発行する前に、このオブジェクトと詳細情報を用意します。java.net の使用をご覧ください。

リクエストの作成

アプリケーションは、HTTP(通常)または HTTPS(セキュア)のいずれか使用し URL をフェッチできます。URL は、http://... または https://... いずれかの使用するスキーマを指定します。

URL は、HTTP(80)および HTTPS(443)の標準ポートを使用しなければなりません。ポートはスキーマによって決まりますが、ポートがスキーマの標準である限り、URL で指定することもできます(https://...:443/)。アプリケーションはリモート ホストの任意のポートに接続することはできません。また、スキーマの非標準ポートを使用することもできません。

フェッチは次の任意の HTTP メソッドでも使用できます。GET(一般的にウェブ ページおよびデータ リクエストに使用)、POST(一般的にウェブ フォームの送信に使用)、PUTHEAD および DELETE。フェッチには HTTP リクエスト ヘッダーとペイロード(HTTP リクエストの本体)を含めることができます。

URL フェッチ サービスは、結果のフェッチに HTTP/1.1 に準拠したプロキシを使用します。

アプリケーションが無限にリクエストを繰り返すのを防ぐため、リクエスト ハンドラは自身の URL をフェッチすることはできません。他の理由により無限にリクエストが繰り返されてしまう場合もあります。そのため、ユーザーが提供した URL へのフェッチ リクエストが実行可能なアプリケーションでは注意が必要です。

URL フェッチ サービスへのコールは同期されており、サービスがリモート ホストからレスポンスを受け取るまで結果は返されません。リモート ホストが応答する前に、アプリケーションのリクエスト タイマーの時間が経過してしまう場合もあります。リクエストの発行後にキャンセルすることはできません。

セキュアな接続と HTTPS

アプリケーションは、セキュアなサーバーへの接続に HTTPS メソッドを使用し URL をフェッチできます。リクエストとレスポンスのデータは、暗号化後にネットワーク上を送信されます。

URL フェッチ サービスが使用するプロキシは、アクセス先のホストを認証できません。証明書信用チェーンがないため、プロキシは自身で署名した証明書も含め、すべての証明書を受け取ります。HTTPS を使用している場合、プロキシ サーバーは App Engine とリモート ホスト間の「介入者攻撃」を検知できません。

リクエスト ヘッダー

アプリケーションは、送信するリクエストの HTTP ヘッダーを設定できます。

HTTP POST リクエストを送信するとき、Content-Type ヘッダーが明示的に設定されていないと、ヘッダーは x-www-form-urlencoded に設定されます。これは Web フォームで使用されるコンテンツ タイプです。

セキュリティ上の理由から、次のヘッダーはアプリケーションによって変更できません。

  • Content-Length
  • Host
  • Referer
  • Vary
  • Via
  • X-Forwarded-For

これらのヘッダーは、App Engine が値を正確で適切に設定するためのものです。たとえば、App Engine は Content-Length ヘッダーをリクエスト データに基づき算出し、送信前にリクエストに追加します。

レスポンス

URL フェッチ サービスは、レスポンス コード、ヘッダーおよび本文を含めたすべてのレスポンス データを返します。

デフォルトでは、URL フェッチ サービスがリダイレクト コードを含むレスポンスを受け取った場合は、サーバーはリダイレクトに従います。サービスは最大 5 つのリダイレクト レスポンスに従い、最後のリソースを返します。API を使用し、URL フェッチ サービスがリダイレクトに従わず、リダイレクト レスポンスをアプリケーションに返すだけにするよう設定できます。

デフォルトでは、受け取るレスポンスが最大レスポンス サイズの制限を超える場合、レスポンスは切り捨てられます。API を使用し、レスポンスが最大サイズを超えた場合に例外を発生するようサービスを設定できます。(制限値は下記をご覧ください。)

企業ファイアウォールの中にあるホストへのアクセス

Google Secure Data Connector(SDC)を使用し、企業ファイアウォールの中にあるシステムにアプリケーションからアクセスできます。ネットワークに SDC エージェントが設定されている場合、Google Apps ドメイン上で稼働している App Engine アプリケーションはエージェントを使用して認証し、イントラネットの URL にアクセスできます。SDC エージェントは、使用しているアプリケーションのみがイントラネットに接続可能であることを保証し、また、ドメイン上の Apps アカウントを使用してログインしているユーザーに対してのみアクセスを許可します。

アプリケーションは、URL フェッチ サービスを使用しイントラネットの URL にアクセスできます。アプリケーションは、SDC エージェント向けのリクエストであることを宣言する特別なヘッダーをリクエストに含めます。ヘッダーには、use_intranet という名前と yes の値が含まれます。他に変更は不要であり、ユーザー確認、認証およびセキュアな接続は自動的に処理されます。

java.net.HttpURLConnection インターフェースを使用し、URL フェッチと共に use_intranet ヘッダーを使用する例を示します。

import java.net.HttpURLConnection;
import java.net.URL;

// ...
        URL url = new URL("http://www.corp.example.com/sales.csv");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("use_intranet", "true");

詳細については、Google Secure Data Connector をご覧ください。

URL フェッチと開発サーバー

アプリケーションがコンピュータ上の開発サーバーで稼働している場合、URL フェッチ サービスへのコールはローカルで処理されます。開発サーバーは、インターネットへのアクセスに使用しているネットワーク設定を使用し、コンピュータからリモート ホストに直接アクセスして URL をフェッチします。

アプリケーションの URL フェッチ機能のテストの際は、コンピュータからリモート ホストにアクセスできるようにしてください。

アプリケーションからイントラネットの URL へのアクセスに Google Secure Data Connector を使用している場合、ファイアウォールの中にあるイントラネットに接続している間にアプリケーションのテストを行うようにしてください。App Engine とは異なり、開発サーバーはイントラネットの URL の解決に SDC エージェントを使用しません。Google Apps および App Engine のみが SDC エージェントで認証できます。

割り当てと制限

各 URL フェッチ リクエストは、URL Fetch API コールの割り当てに数えられます。

URL フェッチ サービスを使用し、HTTP または HTTPS リクエストで送信されたデータは、次の割り当てに数えられます。

  • 送信帯域幅(調整可能)
  • 送信された URL フェッチ データ

この割り当てに加え、HTTPS リクエストで送信されたデータは次の割り当てに数えられます。

  • セキュアな送信帯域幅(調整可能)

URL フェッチ サービスを使用し、HTTP または HTTPS リクエストのレスポンスとして受信したデータは次の割り当てに数えられます。

  • 受信帯域幅(調整可能)
  • 受信した URL フェッチ データ

この割り当てに加え、HTTPS リクエストへのレスポンスとして受信したデータは次の割り当てに数えられます。

  • セキュアな受信帯域幅(調整可能)

割り当ての詳細については、割り当て、および管理コンソールの「割り当て詳細」セクションをご覧ください。

割り当てに加え、URL フェッチ サービスの使用には次の制限があります。

制限 制限値
リクエスト サイズ 1 MB
レスポンス サイズ 1 MB