java 解析域名得到host

时间:2023-12-28 16:07:38

// 形如https://www.baidu.com 或 www.baidu.com, 判断这两种情况,并解析前者去掉http头,传入domain host

// 方案1:正则表达式 + URI解析方法

import java.io.IOException;
import java.net.URI;
import java.net.URL;
import java.util.regex.Pattern; public class Main { public static void main(String[] args) {
System.out.println("Hello World!");
// parseDomain();
String url = "www.baidu.com";
String domain = parseDomain(url);
System.out.println("+++domain: " + domain);
} public static boolean verifyDomain(String url) {
String regex = "^([hH][tT]{2}[pP]:/*|[hH][tT]{2}[pP][sS]:/*|[fF][tT][pP]:/*)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+(\\?{0,1}(([A-Za-z0-9-~]+\\={0,1})([A-Za-z0-9-~]*)\\&{0,1})*)$";
Pattern pattern = Pattern.compile(regex);
if (pattern.matcher(url).matches()) {
System.out.println("是正确的网址");
return true;
} else {
System.out.println("非法网址");
return false;
}
} private static String parseDomain(String url) {
String regex = "^([hH][tT]{2}[pP]:/*|[hH][tT]{2}[pP][sS]:/*|[fF][tT][pP]:/*)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+(\\?{0,1}(([A-Za-z0-9-~]+\\={0,1})([A-Za-z0-9-~]*)\\&{0,1})*)$";
Pattern pattern = Pattern.compile(regex);
if (pattern.matcher(url).matches()) {
       return URI.create(url).getHost();
} else {
       return url;
}
} public static void parseDomain() throws IOException {
String urlAddress = "http://www.roseindia.net/jsf/JSFLoginApplication.shtml";
urlAddress = "http://www.baidu.com";
URL url = new URL(urlAddress);
System.out.println("url.getHost() = " + url.getHost());
System.out.println("url.getPath() = " + url.getPath());
System.out.println("url.getPort() = " + url.getPort());
System.out.println("url.getProtocol() = " + url.getProtocol());
}
}

// 方案2: String的split(), substring(), 拆解出子串来

一般的URL的结构:

[ 协议名 ]:// [ 域名 ] : [ 端口号 ] / [ 路 ] ... [ 径 ]/ [ 文件名 ] ? [ 参 ]& [ 数 ] & [ 部 ]& [ 分 ] # [ 锚部分 ]

js代码如下:

function parseURL(url){
var urlObj={};
urlObj.scheme = url.substring(0,url.indexOf(":")); //协议头
var temp1=url.substring(url.indexOf("//")+2); //去掉协议头后剩下部分
var temp2=temp1.substring(0,temp1.indexOf("/"))//域名+端口号,substring(start,stop) stop要比最后一个提取的字符位置多1
urlObj.domaine = temp2.substring(0,temp1.indexOf(":"));
urlObj.port = temp2.substring(temp1.indexOf(":")+1); if(temp1.indexOf("?")!=-1){
urlObj.path =temp1.substring(temp1.indexOf("/")+1,temp1.indexOf("?"))//路径+文件名
emp1.IndexOf("#")!=-1? urlObj.params=temp1.substring(temp1.indexOf("?")+1,temp1.IndexOf("#"))
:urlObj.params=temp1.substring(temp1.indexOf("?")+1)
}else{
urlObj.path =temp1.substring(temp1.indexOf("/")+1);
}
urlObj.fragment=temp1.substring(temp1.indexOf("#")+1);
return urlObj;
}