lazyfling commited on
Commit
3caac16
·
verified ·
1 Parent(s): 7c79775

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -13
app.py CHANGED
@@ -2,41 +2,46 @@ from flask import Flask, request, jsonify
2
  import requests
3
  import logging
4
 
5
- # 设置日志记录,便于调试
6
  logging.basicConfig(level=logging.INFO)
7
 
8
  app = Flask(__name__)
9
 
10
- def proxy_request(url):
11
  try:
12
- # 获取原始请求的头部和参数
13
- headers = {key: value for key, value in request.headers.items() if key.lower() != 'host'} # 避免Host冲突
14
  response = requests.request(
15
  method=request.method,
16
- url=url,
17
  headers=headers,
18
  data=request.get_data(),
19
  params=request.args,
20
- timeout=10 # 设置超时时间避免卡住
 
21
  )
22
- # 返回响应的内容和状态码
23
  return response.content, response.status_code, response.headers
24
  except requests.exceptions.RequestException as e:
25
  logging.error(f"代理请求错误: {e}")
26
- return jsonify({"error": "请求失败,请检查URL或网络连接"}), 500
27
 
28
- @app.route('/proxy/<path:url>') # 使用<path:url>来处理动态路径
29
  def handle_proxy(url):
30
- full_url = f"https://{url}" # 假设目标HTTPS网站,你可以根据需要调
 
 
 
 
31
  content, status_code, headers = proxy_request(full_url)
32
  response = app.response_class(
33
  response=content,
34
  status=status_code,
35
- mimetype='application/octet-stream' # 默认类型,可以根据响应调整
36
  )
 
37
  for key, value in headers.items():
38
- response.headers[key] = value # 传递原始响应头部
 
39
  return response
40
 
41
  if __name__ == '__main__':
42
- app.run(host='0.0.0.0', port=7860, debug=True) # 在Spaces上,默认端口是7860
 
2
  import requests
3
  import logging
4
 
 
5
  logging.basicConfig(level=logging.INFO)
6
 
7
  app = Flask(__name__)
8
 
9
+ def proxy_request(full_url):
10
  try:
11
+ headers = {key: value for key, value in request.headers.items() if key.lower() != 'host'}
12
+ headers['User-Agent'] = request.headers.get('User-Agent', 'Mozilla/5.0 (compatible; ProxyBot/1.0)') # 添加默认User-Agent
13
  response = requests.request(
14
  method=request.method,
15
+ url=full_url, # 确保是完整的URL
16
  headers=headers,
17
  data=request.get_data(),
18
  params=request.args,
19
+ timeout=60, # 延长超时到60秒防止网络延迟
20
+ verify=True # 确保SSL验证
21
  )
 
22
  return response.content, response.status_code, response.headers
23
  except requests.exceptions.RequestException as e:
24
  logging.error(f"代理请求错误: {e}")
25
+ return jsonify({"error": str(e)}), 500
26
 
27
+ @app.route('/proxy/<path:url>')
28
  def handle_proxy(url):
29
+ # 确保url的;如果不是,添加协议
30
+ if not url.startswith('http'):
31
+ full_url = f"https://{url}"
32
+ else:
33
+ full_url = url # 如果用户输入了完整的URL,就直接用
34
  content, status_code, headers = proxy_request(full_url)
35
  response = app.response_class(
36
  response=content,
37
  status=status_code,
38
+ mimetype=headers.get('Content-Type', 'text/html') # 自动获取正确的MIME类型
39
  )
40
+ # 过滤并传递头部,避免冲突
41
  for key, value in headers.items():
42
+ if key.lower() not in ['transfer-encoding', 'connection']: # 忽略可能导致502的头部
43
+ response.headers[key] = value
44
  return response
45
 
46
  if __name__ == '__main__':
47
+ app.run(host='0.0.0.0', port=7860, debug=True)