diff --git a/napcat.webui/src/controllers/webui_manager.ts b/napcat.webui/src/controllers/webui_manager.ts index ca84bae4..716ae33f 100644 --- a/napcat.webui/src/controllers/webui_manager.ts +++ b/napcat.webui/src/controllers/webui_manager.ts @@ -24,6 +24,14 @@ export default class WebUIManager { return data.data.Credential } + public static async proxy(url = '') { + const data = await serverRequest.get>( + '/base/proxy?url=' + encodeURIComponent(url) + ) + data.data.data = JSON.parse(data.data.data) + return data.data as ServerResponse + } + public static async getPackageInfo() { const { data } = await serverRequest.get>('/base/PackageInfo') diff --git a/napcat.webui/src/utils/music.ts b/napcat.webui/src/utils/music.ts index 56494104..c774b19d 100644 --- a/napcat.webui/src/utils/music.ts +++ b/napcat.webui/src/utils/music.ts @@ -6,17 +6,17 @@ import type { Music163URLResponse } from '@/types/music' -import { request } from './request' - +import WebUIManager from '@/controllers/webui_manager' /** * 获取网易云音乐歌单 * @param id 歌单id * @returns 歌单信息 */ export const get163MusicList = async (id: string) => { - const res = await request.get( - `https://wavesgame.top/playlist/track/all?id=${id}` - ) + let res = await WebUIManager.proxy('https://wavesgame.top/playlist/track/all?id=' + id); + // const res = await request.get( + // `https://wavesgame.top/playlist/track/all?id=${id}` + // ) if (res?.data?.code !== 200) { throw new Error('获取歌曲列表失败') } @@ -39,7 +39,7 @@ export const getSongsURL = async (ids: number[]) => { }, [] as number[][]) const res = await Promise.all( _ids.map(async (id) => { - const res = await request.get( + const res = await WebUIManager.proxy( `https://wavesgame.top/song/url?id=${id.join(',')}` ) if (res?.data?.code !== 200) { diff --git a/src/webui/src/api/Proxy.ts b/src/webui/src/api/Proxy.ts new file mode 100644 index 00000000..f211ab5c --- /dev/null +++ b/src/webui/src/api/Proxy.ts @@ -0,0 +1,14 @@ +import { RequestHandler } from "express"; +import { RequestUtil } from "@/common/request"; +import { sendError, sendSuccess } from "../utils/response"; + +export const GetProxyHandler: RequestHandler = async (req, res) => { + let { url } = req.query; + if (url && typeof url === "string") { + url = decodeURIComponent(url); + const responseText = await RequestUtil.HttpGetText(url); + res.send(sendSuccess(res, responseText)); + } else { + res.send(sendError(res, 'url参数不合法')); + } +}; \ No newline at end of file diff --git a/src/webui/src/router/Base.ts b/src/webui/src/router/Base.ts index df476f8c..38a35292 100644 --- a/src/webui/src/router/Base.ts +++ b/src/webui/src/router/Base.ts @@ -1,11 +1,12 @@ import { Router } from 'express'; import { PackageInfoHandler, QQVersionHandler } from '../api/BaseInfo'; import { StatusRealTimeHandler } from "@webapi/api/Status"; +import { GetProxyHandler } from '../api/Proxy'; const router = Router(); // router: 获取nc的package.json信息 router.get('/QQVersion', QQVersionHandler); router.get('/PackageInfo', PackageInfoHandler); router.get('/GetSysStatusRealTime', StatusRealTimeHandler); - +router.get('/proxy', GetProxyHandler); export { router as BaseRouter };