环境:Node.js + npm,当然也能迁移到前端,Webpack 打包一下就好。
需要安装的库:
axios: 用来发送 GET 请求。
iconv-lite: 用来将 HTML 数据的
Buffer
转成gb2312
编码。
前置条件:
先通过统一登录认证,跳转到内部网。查看 Cookies,找到一个叫 ASPSESSIONIDCCDSARBT
的字段,把值复制下来。(登录这个步骤应该也可以通过代码来实现,稍后再研究,有结果了会更新本文)
代码:
import axios from 'axios';
import iconv from 'iconv-lite';
const result = await axios.get('https://www1.szu.edu.cn/board/', {
responseType: 'arraybuffer',
headers: {
Cookie: 'ASPSESSIONIDCCDSARBT=[COOKIE]'
}
})
const html = iconv.decode(result.data, 'gb2312');
const data = html
.match(/title="(.*?)" target="_blank" href="(.*?)"/g)
.map(value => ({
title: value.match(/title="(.*?)"/)[1],
url: `https://www1.szu.edu.cn/board/${value.match(/href="(.*?)"/)[1]}`
})
);
其中 [COOKIE]
就是上一步中拿到的 cookie。
结果示例: