阿里云:
服务器购买地址
https://t.aliyun.com/U/C6sVsb
若失效,可用地址
https://www.aliyun.com/activity/wuying/dj?source=5176.29345612&userCode=49hts92d
腾讯云:
https://curl.qcloud.com/wJpWmSfU
若失效,可用地址
https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console
华为云
https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905
2.部署教程
3.代码如下
const axios = require("axios");
const { username,password } = config.linovel
headers = {
referer: "https://www.linovel.net/my/profile",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
"x-requested-with": "XMLHttpRequest",
cookie: " "
}
function get(op, data) {
return new Promise(async (resolve) => {
try {
let url = `https://www.linovel.net/my/${op}?xhr=1`;
let res = await axios.get(url, {
headers
});
if (data) res = await axios.post(op, data, {
headers
});
if (res.data.code == 0) {
msg = res.data.msg
if (op == "qiandao") msg = `签到成功✅ 获得${res.data.data.base}墨水,连签${res.data.data.day}天`;
if (op == "getMonthlyTicket") msg = `领取月票成功✅ 获得${res.data.data.now}月票`;
} else {
msg = res.data.msg
}
if (data) {
ckk = res.headers["set-cookie"];
ck = "";
for (i = 0; i < ckk.length; i++) {
ck += ckk[i].split("expires")[0] + ";"
}
headers.cookie = ck
}
resolve(msg)
} catch (err) {
console.log(err);
resolve("签到接口请求出错")
}
resolve();
});
}
async function login(kotori) {
let loginRes = await get("https://www.linovel.net/auth/doLogin", `_kotori=${kotori}&lgt=1&redirect=%2F&username=${username}&password=${password}`)
console.log(loginRes)
if (loginRes == "登录成功") gg = true
else gg = false
return gg
}
function getkotori() {
return new Promise(async (resolve) => {
try {
let res = await axios.get("https://www.linovel.net/auth/login?lgt=1")
let t = res.data.match(/\"_kotori\" value=\"(.+?)\"/)
resolve(t && t[1])
} catch (err) {
// console.log(err);
resolve()
}
resolve();
});
}
async function linovel() {
r = false
let kotori = await getkotori()
if (kotori) r = await login(kotori)
if (r) {
let qdmsg = await get("qiandao")
let ypmsg = await get("getMonthlyTicket")
let Liresult = `【轻之文库】:\n签到:${qdmsg}\n领取月票:${ypmsg}`
return Liresult
} else return "【轻之文库】:登陆失败"
}
module.exports = linovel;
解析
这脚本用于轻之文库的网站自动化登录、签到和领取月票脚本。并且利用axios
库来发送HTTP请求。
get(op, data):
该函数是一个通用的HTTP请求处理函数,用于发送GET或POST请求。 参数 op
代表操作类型,用于构建URL路径。如果data
存在,则发送POST请求;否则发送GET请求。函数根据操作类型 op
(如"qiandao"、"getMonthlyTicket")调整返回的消息格式。如果请求中返回了cookie,该函数还会更新请求头中的cookie信息,以维持会话状态。 函数处理请求的结果,并返回相应的消息。 login(kotori):
该函数用于处理登录操作。它首先调用 get
函数发送登录请求。参数 kotori
是一个动态获取的安全令牌,用于增强登录安全性。根据登录结果更新全局变量 gg
(可能是用于控制流程的标志),并返回登录是否成功的布尔值。getkotori():
这个函数用于从登录页面获取安全令牌 _kotori
,该令牌通常用于防止跨站请求伪造(CSRF)。它通过解析登录页面的HTML内容来获取 _kotori
值。如果成功获取到令牌,返回该令牌;否则返回空。 async function linovel():
这是模块的主控制函数,用于协调整个自动化过程。 它首先尝试获取 _kotori
令牌,然后尝试使用该令牌登录。如果登录成功,它会继续执行签到和领取月票的操作,并格式化这些操作的结果为一段消息。 如果登录失败,返回一个表示登录失败的消息。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论