【Java】URLクラスとは?URLにアクセスしHTMLを取得する方法を解説
  • facebookページ
  • twitterページ
  • 2021.02.25

    【Java】URLクラスとは?URLにアクセスしHTMLを取得する方法を解説

    JavaのURLクラスとは?

    URLクラスは、Uniform Resource Locator (ユニフォーム・リソース・ロケータ)、World Wide Web上のリソースへのポインタを表すものです。

    リソースは、ファイル・ディレクトリのような単純なものである場合や、データベース・検索エンジンに対するクエリーなど、複雑なオブジェクトへの参照の場合もあります。

    アクセスしたい情報のURLがわかっていれば、java.net.URLクラスを用いることで、簡単に取得可能です。

    URLクラスを使ったWebコンテンツの取得は、次の手順で行われます。

    URLクラスを使ったWebコンテンツの取得手順
    • URLクラスをインスタンス化(new)する
    • openStream()を呼び出して、データを取り出すストリームを取得する
    • read()を呼び出してストリームから1バイトずつ情報を取り出す

    openStream()の戻り値として取得できるのはInputStreamですが、InputStreamの先は自分のPCにあるファイルではなくインターネット上のWebページにつながっています。

    つながっている先がファイルかWebページかの違いなため、ファイルを1バイトずつ読むのと同じように処理可能です。

    実際に取得するデータが画像ファイルではなくHTMLのような文字データの場合、文字ストリームとして取得した方が便利です。

    そのため、InputStreamReaderを組み合わせて利用する場合もよくあります。

    URLクラスで使用できるメソッドは次の通りです。

    修飾子と型 メソッドと説明
    boolean equals(Object obj)
    URLと別のオブジェクトとが等しいかどうかを比較
    String getAuthority()
    URLの機関部分を取得
    Object getContent()
    URLのコンテンツを取得
    Object getContent(Class[] classes)
    URLのコンテンツを取得
    int getDefaultPort()
    URLに関連するプロトコルのデフォルトのポート番号を取得
    String getFile()
    URLのファイル名を取得
    String getHost()
    該当する場合、URLのホスト名を取得
    String getPath()
    URLのパス部分を取得
    int getPort()
    URLのポート番号を取得
    String getProtocol()
    URLのプロトコル名を取得
    String getQuery()
    URLのクエリー部分を取得
    String getRef()
    URLのアンカー(参照)を取得
    String getUserInfo()
    URLのユーザー情報部分を取得
    int hashCode()
    ハッシュ表のインデックス付けに適したint値を作成
    URLConnection openConnection()
    URLが参照するリモート・オブジェクトへの接続を表すURLConnectionインスタンスを返却
    URLConnection openConnection(Proxy proxy)
    openConnection()とほぼ同様だが、接続の確立が指定されたプロキシ経由で行われる点が異なる
    プロキシ処理をサポートしないプロトコル・ハンドラは、プロキシのパラメータを無視し、通常の接続を確立
    InputStream openStream()
    URLへの接続を開き、その接続から読み込むためのInputStreamを返却
    boolean sameFile(URL other)
    フラグメント・コンポーネント以外の2つのURLを比較
    static void setURLStreamHandlerFactory
    (URLStreamHandlerFactory fac)
    アプリケーションのURLStreamHandlerFactoryを設定
    String toExternalForm()
    URLの文字列表現を構築
    String toString()
    URLの文字列表現を構築
    URI toURI()
    このURLと等価なURIを返却

    URLにアクセス・取得する

    では実際に、URLにアクセス・取得するサンプルコードを確認してみましょう。

    ここでは、本サイト「style.potepan.com」を取得してみました。

    記述例は次の通りです。

    URLは「https」ではなく「http」で指定します。

    「style.potepan.com」のHTMLを取得できたのがわかります。

    なお、「http」ではなく「https」から始まるURLで取得するには、「URLConnectionクラス」を利用します。

    URLをエンコード・デコードするには?

    JavaでURLのエンコード・デコードをする場合は、「URLEncoderクラス」「URLDecoderクラス」を使用しましょう。

    • URLEncoderクラス:HTML形式をエンコードするためのユーティリティ・クラス
    • URLDecoderクラス:HTML形式をデコードするためのユーティリティ・クラス

    エンコード・デコードする際は、次のルールが適用されます。

    URLのエンコード・デコードする際のルール
    • 英数字文字の「a」から「z」、「A」から「Z」、「0」から「9」は元のまま残る
      特・殊文字の「.」、「-」、「*」、および「_」は元のまま残る
    • プラス記号「+」は空白文字「 」に変換する
    • 「%xy」という形式のシーケンスは、バイトの表現として扱われる
      • 「xy」は8ビットを2桁の16進数で表現したもの
      • バイト・シーケンスを連続して1つ以上含む部分文字列はすべて、エンコーディング結果がそれらの連続したバイトになるような文字へと置換する
      • 文字のエンコード・デコードに使用するエンコーディング方式は指定可能ですが、指定しなかった場合には、プラットフォームのデフォルトのエンコーディングが使用される

    では、実際にサンプルコードで動きを確認しましょう。

    URLをエンコードした結果と、デコードした結果が取得できました。

    適用されるルールの通り、エンコード時は指定した文字以外・日本語部分は、16進数表記に変換されています。

    URLとURIの違いは?

    URIは、指定のURIと他URIの指し示すものが同一であるか、ベースURIと相対URIを解決して新しいURIを作成するといった操作がメインのクラスです。

    一方、URL(Uniform Resource Locator)は、何かしらのリソースが存在することを表現するものです。

    リソースは、ファイル・ディレクトリのような単純なものである場合や、データベース・検索エンジンに対するクエリーなど、複雑なオブジェクトへの参照である場合などがあります。

    URLはURIでできる単純な文字列表現だけではなく、リソースにアクセスするための手段もあわせて提供しているのです。

    参考:URI (Java Platform SE 8 )



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE