bobocup commited on
Commit
940b595
·
verified ·
1 Parent(s): 00e65da

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -37
app.py CHANGED
@@ -23,22 +23,14 @@ async def get_http_client():
23
  http2=True
24
  )
25
 
26
- async def proxy_handler(path: str, request: Request):
27
  try:
28
- # 移除开头和结尾的斜杠
29
- path = path.strip('/')
30
- url = f"{TARGET_URL}/{path}" if path else TARGET_URL
31
-
32
  headers = dict(request.headers)
33
  headers.pop('host', None)
34
  headers.pop('connection', None)
35
  headers.pop('content-length', None)
36
  headers.pop('transfer-encoding', None)
37
 
38
- # 修改 referer
39
- if 'referer' in headers:
40
- headers['referer'] = headers['referer'].replace(str(request.base_url), f"{TARGET_URL}/")
41
-
42
  params = dict(request.query_params)
43
  body = await request.body()
44
 
@@ -56,16 +48,8 @@ async def proxy_handler(path: str, request: Request):
56
  response_headers.pop('content-encoding', None)
57
  response_headers.pop('content-length', None)
58
 
59
- # 修改响应中的所有目标URL引用
60
- content = response.content
61
- if response.headers.get('content-type', '').startswith(('text/html', 'text/css', 'application/javascript')):
62
- content = content.replace(
63
- TARGET_URL.encode(),
64
- str(request.base_url).rstrip('/').encode()
65
- )
66
-
67
  return Response(
68
- content=content,
69
  status_code=response.status_code,
70
  headers=response_headers,
71
  media_type=response.headers.get('content-type')
@@ -78,27 +62,21 @@ async def proxy_handler(path: str, request: Request):
78
  except Exception as e:
79
  return Response(content=f"服务器错误: {str(e)}", status_code=500)
80
 
81
- # 处理 /api 路径(映射到根路径)
82
- @app.api_route("/api", methods=["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH"])
83
- async def api_root(request: Request):
84
- return await proxy_handler("", request)
85
-
86
- # 处理 /api/ 路径(也映射到根路径)
87
- @app.api_route("/api/", methods=["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH"])
88
- async def api_root_slash(request: Request):
89
- return await proxy_handler("", request)
90
-
91
- # 处理 /api/xxx 路径
92
- @app.api_route("/api/{path:path}", methods=["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH"])
93
- async def api_proxy(path: str, request: Request):
94
- return await proxy_handler(path, request)
95
 
96
- # 处理其他路径
97
  @app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH"])
98
- async def general_proxy(path: str, request: Request):
99
- if path == "api":
100
- return await proxy_handler("", request)
101
- return await proxy_handler(path, request)
 
 
 
102
 
103
  @app.get("/healthcheck")
104
  async def healthcheck():
 
23
  http2=True
24
  )
25
 
26
+ async def proxy_handler(url: str, request: Request):
27
  try:
 
 
 
 
28
  headers = dict(request.headers)
29
  headers.pop('host', None)
30
  headers.pop('connection', None)
31
  headers.pop('content-length', None)
32
  headers.pop('transfer-encoding', None)
33
 
 
 
 
 
34
  params = dict(request.query_params)
35
  body = await request.body()
36
 
 
48
  response_headers.pop('content-encoding', None)
49
  response_headers.pop('content-length', None)
50
 
 
 
 
 
 
 
 
 
51
  return Response(
52
+ content=response.content,
53
  status_code=response.status_code,
54
  headers=response_headers,
55
  media_type=response.headers.get('content-type')
 
62
  except Exception as e:
63
  return Response(content=f"服务器错误: {str(e)}", status_code=500)
64
 
65
+ # 处理 /api/v1 路径
66
+ @app.api_route("/api/v1/{path:path}", methods=["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH"])
67
+ async def api_v1_proxy(path: str, request: Request):
68
+ url = f"{TARGET_URL}/v1/{path}"
69
+ return await proxy_handler(url, request)
 
 
 
 
 
 
 
 
 
70
 
71
+ # 处理根路径和其他路径
72
  @app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH"])
73
+ async def root_proxy(path: str, request: Request):
74
+ # 如果是根路径或空路径
75
+ if not path or path == "/":
76
+ url = TARGET_URL
77
+ else:
78
+ url = f"{TARGET_URL}/{path}"
79
+ return await proxy_handler(url, request)
80
 
81
  @app.get("/healthcheck")
82
  async def healthcheck():