Java获取URL地址中的域名或IP

在Java开发中,我们经常需要从URL地址中提取域名或IP地址。这在网络爬虫、防火墙、反向代理等网络相关的应用中非常常见。本文将介绍如何使用Java获取URL地址中的域名或IP,并提供相应的代码示例。

什么是域名和IP地址

在深入了解如何获取URL地址中的域名或IP之前,我们首先需要理解什么是域名和IP地址。

域名是用于标识一个或多个IP地址的字符串。它是由多个部分组成,这些部分用点号分隔。例如,www.example.com是一个域名。

IP地址是标识网络上设备(如计算机、服务器等)的数字地址。它是由四个8位的数字组成,每个数字范围从0到255,用点号分隔。例如,192.168.0.1是一个IP地址。

解析URL获取域名或IP地址

Java提供了java.net.URL类来解析URL地址,并获取其中的域名或IP地址。下面是一个示例代码:

import java.net.*;

public class URLParser {
    public static void main(String[] args) {
        try {
            URL url = new URL("

            // 获取域名
            String domain = url.getHost();
            System.out.println("域名:" + domain);

            // 获取IP地址
            InetAddress ip = InetAddress.getByName(domain);
            String ipAddress = ip.getHostAddress();
            System.out.println("IP地址:" + ipAddress);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们使用URL类解析了一个URL地址,并通过getHost()方法获取了域名。然后,我们使用InetAddress类的getByName()方法通过域名获取了IP地址。

使用正则表达式获取域名

除了使用URL类,我们还可以使用正则表达式来提取URL地址中的域名。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DomainExtractor {
    public static void main(String[] args) {
        String url = "

        // 正则表达式
        String pattern = "(?i)^http[s]?://(?:www\\.)?([a-zA-Z0-9\\-\\.]+)(?:\\.[a-zA-Z]{2,3})?(/.*)?$";
        Pattern regex = Pattern.compile(pattern);
        Matcher matcher = regex.matcher(url);

        if (matcher.matches()) {
            String domain = matcher.group(1);
            System.out.println("域名:" + domain);
        }
    }
}

在上面的代码中,我们使用正则表达式(?i)^http[s]?://(?:www\\.)?([a-zA-Z0-9\\-\\.]+)(?:\\.[a-zA-Z]{2,3})?(/.*)?$匹配URL地址,并提取其中的域名。该正则表达式可以匹配以httphttps开头,可选的www.子域名,以及域名后面的路径。

综合示例

下面是一个综合示例,演示如何获取URL地址中的域名和IP。

import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class URLParser {
    public static void main(String[] args) {
        String url = "

        // 使用URL类获取域名
        try {
            URL urlObj = new URL(url);
            String domain = urlObj.getHost();
            System.out.println("域名:" + domain);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        // 使用正则表达式获取域名
        String pattern = "(?i)^http[s]?://(?:www\\.)?([a-zA-Z0-9\\-\\.]+)(?:\\.[a-zA-Z]{2,3})?(/.*)?$";
        Pattern regex = Pattern.compile(pattern);
        Matcher matcher = regex.matcher(url);

        if (matcher.matches()) {
            String domain = matcher.group(1);
            System.out.println("域名:" + domain);
        }

        // 使用URL类获取IP地址
        try {
            InetAddress ip = InetAddress.getByName(url);
            String ipAddress = ip.getHostAddress();
            System.out.println("IP地址:" + ipAddress);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}
``