当前位置:首页 > 行业动态 > 正文

httpclient获取域名

使用HttpClient发起请求后,从响应或请求的URI中提取域名,在Java中,通过 HttpRequest.uri().getHost()获取主机名,或解析URI的 host属性即可得到

HttpClient 获取域名的核心逻辑

在使用 HttpClient 发起 HTTP 请求时,通常需要从 URL 中提取域名(如 example.com),域名是 URL 的主机部分,可能包含子域名(如 api.example.com)或端口号(如 example.com:8080),以下是关键步骤:

httpclient获取域名  第1张

  1. 解析 URL:通过 java.net.URI 类解析 URL,提取主机名(host)。
  2. 处理端口号:URL 包含端口号,需判断是否为默认端口(80/443),默认端口可省略。
  3. 标准化域名:去除前导 www.(可选),统一格式。

代码实现示例

以下代码演示如何通过 HttpClient 获取域名:

import java.net.URI;
import java.net.URISyntaxException;
public class DomainExtractor {
    public static String getDomain(String url) throws URISyntaxException {
        URI uri = new URI(url);
        String host = uri.getHost(); // 获取主机名(含子域名和端口)
        // 处理端口号(可选)
        if (uri.getPort() != -1 && (uri.getScheme().equals("http") ? uri.getPort() != 80 : !uri.getScheme().equals("https"))) {
            host += ":" + uri.getPort();
        }
        // 去除 www.(可选)
        if (host != null && host.startsWith("www.")) {
            host = host.substring(4);
        }
        return host;
    }
}

单元测试用例

输入 URL 提取的域名 说明
http://example.com example.com 基础域名,无子域名和端口
https://api.example.com/path api.example.com 包含子域名,无端口
http://example.com:8080 example.com:8080 非默认端口,需保留端口号
https://www.example.com example.com 自动去除 www.
ftp://ftp.example.com/resource ftp.example.com 支持非 HTTP 协议(依赖 URI 解析)
http://localhost:3000 localhost:3000 本地地址,保留端口号

常见问题与解答

问题 1:如何处理无效 URL?

解答:使用 try-catch 捕获 URISyntaxException

try {
    String domain = DomainExtractor.getDomain("http://invalid-url");
} catch (URISyntaxException e) {
    System.out.println("URL 格式错误");
}

问题 2:如何区分主域名和子域名?

解答:主域名是最后两部分(如 example.com),子域名是前面的部分(如 api.example.com 中的 api),可通过分割 后判断:

String[] parts = host.split("\.");
if (parts.length > 2) {
    String subdomain = parts[0]; // 子域名
    String mainDomain = parts[1] + "." + parts[2]; // 主域名
}
0