首頁  >  文章  >  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.URI 類別而不是java.net. URL。後者存在已知問題,例如其有問題的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」字首)

要解決這些邊緣情況,請考慮參考RFC 3986 的附錄B,它提供了一個全面的正則表達式,用於解析URI 引用並將它們分解為單獨的組件。

以上是如何可靠地從 URL 中提取網域:替代技術和邊緣情況的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn