首頁  >  文章  >  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。
  • 它假設協議是始終為小寫,這不是一個有效的假設。
  • 它在 URL 相等性檢查期間執行不必要的 DNS 查找,這可能導致拒絕服務攻擊。

改進的實作

為了解決這些問題,我們建議使用 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

整體而言,使用java.net.URI 進行URL 解析提供了一種更全面、更準確的方法來從URL中提取域名,特別是在處理複雜或可能無效的情況時網址。

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

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