diff --git a/xiaomusic/api/routers/file.py b/xiaomusic/api/routers/file.py index 32881d2..8ccf9b2 100644 --- a/xiaomusic/api/routers/file.py +++ b/xiaomusic/api/routers/file.py @@ -4,7 +4,7 @@ import asyncio import base64 import os import shutil -from urllib.parse import urlparse +from urllib.parse import parse_qs, urlparse import aiohttp from fastapi import ( @@ -301,6 +301,21 @@ async def proxy(urlb64: str): status_code=400, detail="无效的URL格式" ) from invalid_url_exc + proxy_pre = f"{xiaomusic.hostname}:{xiaomusic.public_port}/api/proxy/openapi-url" + # 解决本地接口认证问题 + if url.startswith(proxy_pre): + query_params = parse_qs(parsed_url.query) + urlb64_value = query_params.get("urlb64", [""])[0] + url_bytes = base64.b64decode(urlb64_value) + origin_url = url_bytes.decode("utf-8") + log.info(f"origin_url: {origin_url}") + # 获取真正地址 + source_url = await xiaomusic.get_real_url_of_openapi(origin_url) + log.info(f"source_url: {source_url}") + parsed_url = urlparse(source_url) + url = source_url + log.info(f"parsed_url: {parsed_url}") + # 创建会话并确保关闭 session = aiohttp.ClientSession( timeout=aiohttp.ClientTimeout(total=600), @@ -325,6 +340,7 @@ async def proxy(urlb64: str): headers = get_wget_headers(parsed_url) resp = await session.get(url, headers=headers, allow_redirects=True) + log.info(f"proxy status: {resp.status}") if resp.status not in (200, 206): await close_session() status_exc = ValueError(f"服务器返回状态码: {resp.status}") diff --git a/xiaomusic/api/routers/music.py b/xiaomusic/api/routers/music.py index 659e15d..8ac9718 100644 --- a/xiaomusic/api/routers/music.py +++ b/xiaomusic/api/routers/music.py @@ -109,7 +109,9 @@ async def get_openapi_source_url( url_bytes = base64.b64decode(urlb64) origin_url = url_bytes.decode("utf-8") # 获取真正地址 + log.info(f"origin_url: {origin_url}") source_url = await xiaomusic.get_real_url_of_openapi(origin_url) + log.info(f"source_url: {source_url}") if not source_url: source_url = xiaomusic.default_url() # 直接重定向到真实URL diff --git a/xiaomusic/online_music.py b/xiaomusic/online_music.py index bf954dc..8da3b2b 100644 --- a/xiaomusic/online_music.py +++ b/xiaomusic/online_music.py @@ -382,10 +382,12 @@ class OnlineMusicService: source_url = item.get("url", "") is_open_api = item.get("isOpenAPI", False) music_item = {} - # 如果是开放接口,可能需要额外处理 - if is_open_api and source_url: + # 如果不是开放接口,可能需要额外处理 + if (not is_open_api) and source_url: # 使用代理url music_item["url"] = self._get_openapi_proxy_url(source_url) + elif source_url: + music_item["url"] = source_url else: # 返回插件源的代理接口 music_item["url"] = self._get_plugin_proxy_url(item)