首頁  >  文章  >  Java  >  如何在 Java 中可靠地從 URL 中提取網域名稱?

如何在 Java 中可靠地從 URL 中提取網域名稱?

Linda Hamilton
Linda Hamilton原創
2024-11-03 04:21:31699瀏覽

How to Reliably Extract Domain Names from URLs in Java?

從 URL 中提取網域名稱

從 URL 中提取網域名稱是 Web 開發和程式設計中的常見任務。有多種方法可以完成此任務,但最直接、最可靠的方法是使用 java.net.URI 類別。

原始 Java 程式碼

提供的 Java程式碼使用 java.net.URL 類別來擷取網域名稱。雖然這種方法在大多數情況下可能有效,但它有局限性和潛在的缺點。

原始程式碼的限制:

  • 它假設URL 開頭為“http”或“https”,情況可能並不總是如此(例如,相對URL)。
  • 它在使用equals 方法比較URL 時執行DNS 查找,使其容易受到拒絕服務攻擊

使用URI 的替代方法

使用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>

首選方法是使用java.net.URI 類,它提供了標準化且可靠的解析方法並操作URL。以下程式碼片段示範了這種方法:

此程式碼首先使用 new URI(url) 建構子將 URL 解析為 URI 物件。然後,它使用 getHost() 方法檢索域名,該方法會傳回 URI 的主機部分。如果主機元件以“www.”開頭,則使用子字串方法刪除“.www”前綴。

要考慮的邊緣情況

  • 即使使用改良的基於URI 的方法,某些邊緣情況仍然可能導致問題:
  • 具有相對路徑的URL(例如,「httpfoo/bar」)
  • 不區分大小寫的協定(例如,「HTTP」) ://example.com/")
  • 協定相關URL(例如,「//example.com/」)

路徑組件以「www」開頭的相對URL(例如, "www/foo")

為了處理這些邊緣情況,可能需要更全面的解析機制,例如RFC 3986 附錄B 中提供的正規表示式。

以上是如何在 Java 中可靠地從 URL 中提取網域名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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