URLParser.java
1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.genersoft.iot.vmp.vmanager.util;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* url验证工具
*/
public class URLParser {
public static void main(String[] args) {
String urlString = "http://127.0.0.1:8080/data/rest"; // 示例URL,实际使用时可以替换为任何URL字符串
try {
Map<String, String> urlParts = parseURL(urlString);
System.out.println("URL分割结果:" + urlParts);
} catch (MalformedURLException e) {
System.out.println(e.getMessage());
}
}
public static Map<String, String> parseURL(String urlString) throws MalformedURLException {
Map<String, String> result = new HashMap<>();
// 尝试创建URL对象以验证格式是否正确
URL url = new URL(urlString);
// 验证协议是否为http
if (!"http".equalsIgnoreCase(url.getProtocol())) {
throw new MalformedURLException("协议必须是http");
}
// 确认主机名(域名或IP)存在
if (url.getHost() == null || url.getHost().isEmpty()) {
throw new MalformedURLException("必须有域名或IP地址");
}
// 设置端口,如果未指定则默认为80
int port = url.getPort();
if (port == -1) {
port = 80; // 默认HTTP端口
}
// 构建最终的路径,包括查询参数(如果有)
String path = url.getPath();
if (url.getQuery() != null && !url.getQuery().isEmpty()) {
path += "?" + url.getQuery();
}
// 将分割的结果放入集合中
result.put("scheme", url.getProtocol());
result.put("hostname", url.getHost());
result.put("port", String.valueOf(port));
result.put("path", path.isEmpty() ? "/" : path); // 如果没有路径,默认为根路径
return result;
}
}