ホームページ  >  記事  >  Java  >  URL からドメイン名を確実に抽出する方法: 代替技術とエッジケース

URL からドメイン名を確実に抽出する方法: 代替技術とエッジケース

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 01:23:02309ブラウズ

How to Extract Domain Names from URLs Reliably: Alternative Techniques and Edge Cases

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

この質問は、URL からドメイン名を効果的に抽出することを目的としています。提供された Java コードは適切に機能しているように見えますが、作成者は、その信頼性を損なう可能性のある優れた技術や潜在的なエッジ ケースについて問い合わせています。

java.net.URI を使用した代替実装

URL を解析するには、java.net.URL の代わりに java.net.URI クラスを利用する、よりクリーンなアプローチをお勧めします。後者には、問題のあるequalsメソッドなどの既知の問題があり、信頼できない入力が関係するシナリオでコードが脆弱になる可能性があります。

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;
}

この改良されたメソッドは、大文字と小文字が正しくない、または大文字と小文字が区別されるエッジケースを処理しながら、ドメイン名を効果的に取得します。 「www」プレフィックスのバリエーション。

考慮すべき追加のエッジケース

元のコードは特定の URL 形式を考慮していない:

  • httpfoo/bar (パスが「http」で始まる相対 URL)
  • HTTP://example.com (大文字と小文字を区別しないプロトコル)
  • //example.com (プロトコル相対 URL)ホストを含​​む)
  • www/foo (パスが「www」で始まる相対 URL)
  • wwwexample.com (「www」で始まるドメイン、ただし「www」プレフィックスは除く)

これらの特殊なケースに対処するには、URI 参照を解析して個々のコンポーネントに分割するための包括的な正規表現を提供する RFC 3986 の付録 B を参照することを検討してください。

以上がURL からドメイン名を確実に抽出する方法: 代替技術とエッジケースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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