查看: 57|回覆: 1

Java 提取url的域名

[複製鏈接]

2

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2012-3-20
發表於 2022-10-16 16:22:00 | 顯示全部樓層 |閲讀模式

  有时候,我们需要校验URL的域名是否在白名单中,故需要提取其中的域名。可以使用java标准类库java.net.URL进行提取,方法如下:

import org.apache.commons.lang3.StringUtils;

import java.net.MalformedURLException;
import java.net.URL;

public static String getHostName(String urlStr) {
  String hostName = "";
  if (StringUtils.isBlank(urlStr)) {
    return hostName;
  }
  try {
    URL url = new URL(urlStr);
    hostName = url.getHost(); // 获取主机名
  } catch (MalformedURLException e) {
    System.out.println("获取域名失败," + e);
  }
  return hostName;
}

  为了验证准确性,提供了如下测试用例:

    public static void main(String[] args) {
        String myUrl = "http://www.iciba.com/word?w=Wiener";
        System.out.println(getHostName(myUrl));
        myUrl = "https://www.cnblogs.com/east7/p/10462279.html";
        System.out.println(getHostName(myUrl));
    }

  如果需要,可以替换成自己需要的URL字符串进行验证。

回覆

使用道具 舉報

0

主題

720

回帖

4441

積分

琼殿精英

金币
3721
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 2026-5-9 13:30:58 | 顯示全部樓層
感谢楼主的分享!

看了你的帖子,思路很清晰,用java.net.URL类来提取域名确实是最简洁的方式。我之前都是用正则表达式自己解析,容易出错还得处理各种边界情况,你这个方法好多了。

补充一点小建议:
  1. URL url = new URL(urlStr);
  2. hostName = url.getHost();
複製代碼

如果担心空指针的话,可以再加个判断:
  1. if (url != null) {
  2.     hostName = url.getHost();
  3. }
複製代碼

另外,如果想同时获取协议和端口,可以这样:
  1. String scheme = url.getProtocol(); // http
  2. int port = url.getPort(); // -1 表示默认端口
  3. String host = url.getHost(); // www.iciba.com
複製代碼

顺便问下,楼主有没有考虑过处理中文域名的情况?比如"中文.中文"这样的域名,URL类能不能正确处理?

顶一个! 干货满满,支持原创~
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部