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

java.net の使用

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

java.net の詳細については、Sun の java.net.URLConnection ドキュメント(英語)をご覧ください。

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) {
            // ...
        }

HttpURLConnection の使用

より高度なリクエストでは、URL オブジェクトの openConnection() メソッドをコールし URLConnection オブジェクト(URL により、HttpURLConnection または HttpsURLConnection のいずれか)を作成することもできます。リクエストを発行する前に、このオブジェクトと詳細情報を用意します。リクエストを実行するには、getInputStream()getOutputStream() などの URLConnection のメソッドをコールします。

URLConnection の App Engine への実装は、リモート ホストとの永続的な接続は保持しません。アプリケーションがリクエスト データを設定、または出力ストリームへの書き込みを実行すると、リクエスト データはメモリに保持されます。アプリケーションが、入力ストリームの取得(または connect() メソッドのコール)など、レスポンスに関する任意のデータにアクセスした場合、App Engine はリクエスト データを指定して URL フェッチ サービスをコールし、レスポンスを取得し、接続を切断してレスポンス データを返します。

次に、フォームのデータと共に特定の URL に HTTP POST リクエストを実行する例を示します。

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.OutputStreamWriter;

// ...
        String message = URLEncoder.encode("my message", "UTF-8");

        try {
            URL url = new URL("http://www.example.com/comment");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");

            OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
            writer.write("message=" + message);
            writer.close();
    
            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                // OK
            } else {
                // Server returned HTTP error code.
            }
        } catch (MalformedURLException e) {
            // ...
        } catch (IOException e) {
            // ...
        }

リクエスト ヘッダーの設定

送信するリクエストに HTTP ヘッダーを設定するには、HttpURLConnection の setRequestProperty() メソッドをコールします。

        connection.setRequestProperty("X-MyApp-Version", "2.7.3");

リダイレクト

デフォルトでは、HttpURLConnection は HTTP リダイレクトを許可します。URL フェッチ サービスは最大 5 つのリダイレクトに従います。

リダイレクトを無効にするには、HttpURLConnection の setFollowRedirects() メソッドをコールします。

        connection.setFollowRedirects(false);

サポートされていない java.net の機能

URL フェッチ サービスは、永続的な HTTP 接続をサポートしていません。URLConnection オブジェクトを使用し、アプリケーションがレスポンス データにアクセスすると、App Engine は URL フェッチ サービスをコールしリクエストを完了します。レスポンス データへアクセスした後は、リクエスト データを変更できません。

アプリケーションは、リクエストのタイムアウトを明示的に設定できません。

低レベル API の機能

URL フェッチ サービスは、送信するリクエストおよび受信するレスポンスのデータ サイズを制限します。java.net API を使用する場合、制限より大きなデータは、通知もないまま切り捨てられます。低レベルの URL Fetch API では、通知せずに切り捨てるか、制限より大きなデータには例外を発生させるかを指定できます。