ホームページ  >  記事  >  Java  >  Java で URL からドメイン名を正確に抽出するにはどうすればよいですか?

Java で URL からドメイン名を正確に抽出するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 22:00:03564ブラウズ

How to Accurately Extract Domain Names from URLs in Java?

URL からのドメイン名の抽出

URL からドメイン名を抽出するタスクは頻繁に発生します。この記事では、このタスクの一般的な Java 実装について説明し、精度を向上させ、潜在的なエッジ ケースに対処するための代替アプローチを検討します。

初期実装

提供された Java コードは正規化することから始まります。必要に応じて、URL の前に「http://」を追加します。次に、java.net.URL を使用して URL を解析し、ホスト文字列を取得します。最後に、ホストが「www」で始まる場合は、「www」の後の部分文字列です。はドメイン名として返されます。

代替アプローチ

ただし、このアプローチには制限があります。

  • 特定のエッジ ケースを処理できません。例: 「http」または「www」で始まるパスを持つ相対 URL。
  • プロトコルは常に小文字であると想定していますが、これは有効な想定ではありません。
  • 実行中に不要な DNS ルックアップを実行します。 URL の等価性チェック。サービス拒否攻撃につながる可能性があります。

実装の改善

これらの問題に対処するには、java.net.URI を使用することをお勧めします。 URL の解析。 URI は、より堅牢で信頼性の高いアプローチを提供します。

<code class="java">public static String getDomainName(String url) throws URISyntaxException {
    URI uri = new URI(url);
    String domain = uri.getHost();
    return domain.startsWith("www.") ? domain.substring(4) : domain;
}</code>

このコードは、URL を URI に変換し、ホスト文字列を取得し、「www.」を削除します。

追加の考慮事項

実装が改善されたとしても、注意すべきいくつかのエッジケースが依然として存在する可能性があります。 RFC 3986 付録 B では、より複雑な URI 解析シナリオを処理できる正規表現が提供されています。

エッジ ケース

次に、初期実装が失敗する可能性がある追加のエッジ ケースをいくつか示します。処理対象:

  • パスまたはホストに複数のスラッシュを含む URL
  • エンコードされた文字を含む URL
  • クエリ文字列またはフラグメント識別子を含む URL
  • 非 ASCII ドメイン名に解決される URL

全体として、URL 解析に java.net.URI を使用すると、特に複雑なドメイン名や潜在的なドメイン名を扱う場合に、URL からドメイン名を抽出するためのより包括的かつ正確な方法が提供されます。無効な URL。

以上がJava で URL からドメイン名を正確に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。