lix02 commited on
Commit
44d9ed4
·
verified ·
1 Parent(s): 97d7cd1

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -0
app.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, Response
2
+ import requests
3
+
4
+ app = Flask(__name__)
5
+
6
+ @app.route('/', defaults={'path': ''})
7
+ @app.route('/<path:path>')
8
+ def proxy(path):
9
+ # 解析请求 URL
10
+ url = request.url
11
+ url_obj = requests.compat.urlparse(url)
12
+
13
+ # 默认目标主机为 chatgpt.com,若路径以 /assets 开头则切换为 cdn.oaistatic.com
14
+ target_host = 'chatgpt.com'
15
+ if url_obj.path.startswith('/assets'):
16
+ target_host = 'cdn.oaistatic.com'
17
+
18
+ new_url = url_obj._replace(netloc=target_host).geturl()
19
+
20
+ # 创建新的 Headers 对象,复制原始请求头
21
+ new_headers = dict(request.headers)
22
+
23
+ # 设置 User-Agent 为模拟无头浏览器的标识,这里结合了 Edge 和 HeadlessChrome 的特征
24
+ new_headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55'
25
+
26
+ # 添加额外的 HTTP 头信息以模拟无头浏览器的请求行为
27
+ new_headers['sec-ch-ua'] = '"Chromium";v="92", " Not A;Brand";v="99", "HeadlessChrome";v="92"'
28
+ new_headers['sec-ch-ua-mobile'] = '?0'
29
+ new_headers['sec-ch-ua-platform'] = '"Windows"'
30
+ new_headers['sec-fetch-site'] = 'none'
31
+ new_headers['sec-fetch-mode'] = 'navigate'
32
+ new_headers['sec-fetch-user'] = '?1'
33
+ new_headers['sec-fetch-dest'] = 'document'
34
+
35
+ # 构造新的请求,保留原有的 method、body(非 GET/HEAD 请求)
36
+ if request.method in ['GET', 'HEAD']:
37
+ resp = requests.request(request.method, new_url, headers=new_headers, allow_redirects=True)
38
+ else:
39
+ resp = requests.request(request.method, new_url, headers=new_headers, data=request.get_data(), allow_redirects=True)
40
+
41
+ # 创建响应对象
42
+ response = Response(resp.content, resp.status_code)
43
+ for key, value in resp.headers.items():
44
+ if key.lower() not in ['content-encoding', 'content-length', 'transfer-encoding', 'connection']:
45
+ response.headers[key] = value
46
+
47
+ return response
48
+
49
+ if __name__ == '__main__':
50
+ app.run(debug=True)