js提取指定网站内容(日本秋名山飙车的时候有没有见过这些域名,你知道吗?)

优采云 发布时间: 2022-04-10 05:25

  js提取指定网站内容(日本秋名山飙车的时候有没有见过这些域名,你知道吗?)

  背景

  最近的项目中,需要获取url的主域名。例如,它需要获取。看起来很简单。aichi.jp 等,这些都无法通过这种简单的取最后两位数的方法得到,似乎只能枚举。

  公共后缀列表

  这个问题想必早就遇到过,所以各界有识之士为大家准备了一份完整的清单,全都是那些精彩的域名,还有一些jp域名也让我长了不少见识,我不知道各位老司机们在秋明山赛车的时候有没有看到这些域名:

  秋田.jp

群馬.jp

香川.jp

高知.jp

鳥取.jp

鹿児島.jp

// jp geographic type names

// http://jprs.jp/doc/rule/saisoku-1.html

*.kawasaki.jp

*.kitakyushu.jp

*.kobe.jp

*.nagoya.jp

*.sapporo.jp

*.sendai.jp

*.yokohama.jp

!city.kawasaki.jp

!city.kitakyushu.jp

!city.kobe.jp

!city.nagoya.jp

!city.sapporo.jp

!city.sendai.jp

!city.yokohama.jp

// 4th level registration

aisai.aichi.jp

  感兴趣的朋友可以看看这个github项目:.

  以下是各种主要域的列表:

  其实浏览器也内置了类似的东西,用于域名判断、cookie存储等事情。

  请问问题

  问题好像解决了,有现成的脚本可以搞定,但是仔细看,脚本有近200K,而我自己的脚本只有10K。既然浏览器内置了pls,那么浏览器会暴露内置接口吗?毛呢布?可惜我没搜,而且浏览器这么多,就算chrome暴露了,IE肯定不暴露等等。刚才好像我们说浏览器是用来做域名判断和cookie存储的,所以可以我们用这个方法?间接调用内置的 pls 怎么样?

  最终解决方案

  目前我想到了两种间接调整的方式,document.doamin和document.cookie。经过测试,你会发现如果尝试设置当前域名为或者设置cookie,浏览器不会生效,document.domain第二次设置,firefox会报错,好像没有非常适合,可能或多或少会影响业务。cookie很容易设置和清除,上面的代码:

  function getMainHost() {

let key = `mh_${Math.random()}`;

let keyR = new RegExp( `(^|;)\\s*${key}=12345` );

let expiredTime = new Date( 0 );

let domain = document.domain;

let domainList = domain.split( '.' );

let urlItems = [];

// 主域名一定会有两部分组成

urlItems.unshift( domainList.pop() );

// 慢慢从后往前测试

while( domainList.length ) {

urlItems.unshift( domainList.pop() );

let mainHost = urlItems.join( '.' );

let cookie = `${key}=${12345};domain=.${mainHost}`;

document.cookie = cookie;

//如果cookie存在,则说明域名合法

if ( keyR.test( document.cookie ) ) {

document.cookie = `${cookie};expires=${expiredTime}`;

return mainHost;

}

}

}

  在pls中拉了差不多几十个域名,跑单元测试,没有问题。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线