上一篇
httpclient获取域名
- 行业动态
- 2025-04-29
- 4465
使用HttpClient发起请求后,从响应或请求的URI中提取域名,在Java中,通过
HttpRequest.uri().getHost()
获取主机名,或解析URI的 host
属性即可得到
HttpClient 获取域名的核心逻辑
在使用 HttpClient 发起 HTTP 请求时,通常需要从 URL 中提取域名(如 example.com
),域名是 URL 的主机部分,可能包含子域名(如 api.example.com
)或端口号(如 example.com:8080
),以下是关键步骤:
- 解析 URL:通过
java.net.URI
类解析 URL,提取主机名(host
)。 - 处理端口号:URL 包含端口号,需判断是否为默认端口(80/443),默认端口可省略。
- 标准化域名:去除前导
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]; // 主域名 }