ネットワーク接続: URL と URLConnection

Java で インターネット上のリソースを利用するには、 class URL と class URLConnection を用います。

class URL

URL(Uniform Resource Locator) を表すクラスです。 URL はインターネット上のリソースの位置を表すものです。

コンストラクタ URL(String url)
指定された文字列のURLを生成
文字列がURLとして不適切であったり、サポートしていないプロトコルが指定されていたりすると、例外 MalformedURLException が発生
コンストラクタ URL(URL context, String spec)
指定されたURL context を元となる URL として、 相対パスや / で始まる絶対パスなどの文字列 spec から新たなURLを生成
メソッド URLConnection openConnection()
URLで表現されたリソースに接続するためのクラスURLConnection(後述)を返す。 場合によっては入出力例外 IOException が発生。
メソッド String toString()
この URL の文字列表現を返す。

その他のコンストラクタ/メソッド(リファレンス)

URL エンコード

URL に使える文字は限られており、英数字以外には「.」「-」「*」「_」しか使えません。 これら以外の文字、例えば空白や全角文字を使いたいときには、 URLエンコード と呼ばれる方法を用います。

Java では URLEncoder クラスの encode メソッドで URLエンコードをすることができます。

クラスメソッド String encode(String s, String enc)
文字コード enc を使って文字列 s を URLエンコードした文字列を返す。
(文字コードは通常 utf-8 を用いるが、サーバに正しく伝わらない場合は euc-jp, shift_jis を試してみるとよい)
    // エンコード前: https://www.google.com/search?q=東京電機大学
    URL url = new URL("https://www.google.com/search?q=" + URLEncoder.encode("東京電機大学", "UTF-8"));
    // エンコード後: https://www.google.com/search?q=%E6%9D%B1%E4%BA%AC%E9%9B%BB%E6%A9%9F%E5%A4%A7%E5%AD%A6

class URLConnection

URLが表す特定のサーバとの接続を表す抽象クラスです。 このオブジェクトは上記 URL クラスの openConnection() メソッドにより得られます。

    URL url = new URL("http://www.w3.org/");
    URLConnection connection = url.openConnection();
メソッド void connect()
リソースの存在するサーバに実際に接続する。 接続する際のパラメータはこのメソッドを実行する前にセットしておくこと。
メソッド InputStream getInputStream()
このメソッドで、この通信の Stream を得ることができる。 ファイルと同様、これを Reader で読めばいい。
メソッド String getContentType()
リソースの種類を得る。Webページ(HTML文書)なのか画像なのか、といった判別をすることができる。
メソッド String getContentEncoding()
リソースの文字コードを得る。 サーバ側でこの情報を出さないことが多いため、機能しないことが多い。

その他のコンストラクタ/メソッド(リファレンス)

HTTP接続をする場合、実際には HttpURLConnection のインスタンスであるので、 HTTP接続固有の情報を参照したい場合には HttpURLConnection でキャストして使うことになります。

    URL url = new URL("http://www.w3.org/");
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    // ブラウザ (User-Agent)
    connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6");
    // リンク元 (Referer)
    connection.setRequestProperty("Referer", "http://www.google.com/");
    // リダイレクトの指示を無視
    connection.setInstanceFollowRedirects(false);

より詳細なヘッダの情報や、ステータスコード、リダイレクトなどを扱うことができます。

メソッド(リファレンス)

Cookie の扱い

セッション管理や履歴の保存などで Cookie が使われることがあります。 Cookie の管理を自前でやるのは煩雑なことですが、 それを暗黙のうちに行ってくれるクラス java.net.CookieHandler があります。 なお、java.net.CookieHandler は抽象クラスで、 java.net.CookieManager が具象クラスです。

    // CookieManager の生成
    CookieManager manager = new CookieManager();
    // CookieHandler のデフォルトに設定
    CookieHandler.setDefault(manager);

こうしておくと、HttpURLConnection が自動的に CookieHandler を呼び出すので、Cookie の保存などの処理が暗黙のうちに行われるようになります。

java.net.CookieManager (リファレンス)