不方便直接列出的类型定义在 luogu-api.d.ts。
对于所有请求:
user-agent
的值不能含有子串 python-requests
或其任意大小写形式。对于非 GET
请求:
referer
的值为 https://www.luogu.com.cn/
。x-csrf-token
,值为未失效的 CSRF 令牌(除非在请求主体中给出)。对于响应主体类型为 DataResponse
的请求:
_contentOnly
(值任意)或头字段 x-luogu-type
(值为 content-only
)。对于响应主体类型为 LentilleDataResponse
的请求:
x-lentille-request
(值为 content-only
)。GET
请求列出主题库中标题含有“模板”的题目。
await fetch("https://www.luogu.com.cn/problem/list?type=P&keyword=模板", {
headers: [
["x-luogu-type", "content-only"],
],
});
POST
请求向此文档的编者发送一条内容为“Hi”的私信。
await fetch("https://www.luogu.com.cn/api/chat/new", {
headers: [
["content-type", "application/json"],
["referer", "https://www.luogu.com.cn/"],
["x-csrf-token", document.querySelector("meta[name=csrf-token]").content],
],
body: JSON.stringify({
user: 206953,
content: "Hi",
}),
method: "POST",
});
监听私信,在日志中记录内容和双方的用户名。
const ws = new WebSocket("wss://ws.luogu.com.cn/ws");
ws.onopen = () => {
ws.send(JSON.stringify({
channel: "chat",
channel_param: `${_feInstance.currentUser.uid}`,
type: "join_channel",
}));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
switch (data._ws_type) {
case "server_broadcast": {
const { message } = data;
console.log(
`${message.sender.name} → ${message.receiver.name}: ${message.content}`,
);
break;
}
}
};