sfun commited on
Commit
8e6dd44
1 Parent(s): 02507d2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -17
app.py CHANGED
@@ -12,25 +12,39 @@ def extract_and_transform_proxies(input_text):
12
  proxies_text = proxies_match.group(1)
13
 
14
  try:
 
15
  proxies_list = yaml.safe_load(proxies_text)
 
 
 
 
 
 
16
  except yaml.YAMLError as e:
17
  return f"YAML解析错误: {str(e)}"
18
 
 
 
 
19
  transformed_proxies = []
20
 
21
  for proxy in proxies_list:
22
- if proxy['type'] == 'ss':
23
- name = proxy['name']
24
- server = proxy['server']
25
- port = proxy['port']
26
- cipher = proxy['cipher']
27
- password = proxy['password']
28
- udp = 'true' if proxy.get('udp', False) else 'false'
 
 
 
 
29
 
30
  transformed = f"{name} = ss, {server}, {port}, encrypt-method={cipher}, password={password}, udp-relay={udp}"
31
  transformed_proxies.append(transformed)
32
 
33
- return "\n".join(transformed_proxies)
34
 
35
  class RequestHandler(BaseHTTPRequestHandler):
36
  def do_GET(self):
@@ -41,20 +55,22 @@ class RequestHandler(BaseHTTPRequestHandler):
41
  url = query_params['url'][0]
42
  try:
43
  response = requests.get(url)
44
- if response.status_code == 200:
45
- input_text = response.text
46
- result = extract_and_transform_proxies(input_text)
47
- self.send_response(200)
48
- self.send_header('Content-type', 'text/plain; charset=utf-8')
49
- self.end_headers()
50
- self.wfile.write(result.encode('utf-8'))
51
- else:
52
- self.send_error(response.status_code, f"Failed to fetch data from {url}")
53
  except requests.RequestException as e:
54
  self.send_error(500, f"Error fetching data: {str(e)}")
55
  else:
56
  self.send_error(400, "Missing 'url' parameter")
57
 
 
 
 
 
58
  def run_server(port=8080):
59
  server_address = ('', port)
60
  httpd = HTTPServer(server_address, RequestHandler)
 
12
  proxies_text = proxies_match.group(1)
13
 
14
  try:
15
+ # 尝试解析YAML
16
  proxies_list = yaml.safe_load(proxies_text)
17
+
18
+ # 检查proxies_list是否为None或不是列表
19
+ if proxies_list is None or not isinstance(proxies_list, list):
20
+ # 如果不是有效的YAML列表,尝试使用正则表达式解析
21
+ proxies_list = re.findall(r'{(.*?)}', proxies_text, re.DOTALL)
22
+ proxies_list = [dict(item.split(': ') for item in proxy.split(', ')) for proxy in proxies_list]
23
  except yaml.YAMLError as e:
24
  return f"YAML解析错误: {str(e)}"
25
 
26
+ if not proxies_list:
27
+ return "未找到有效的代理配置"
28
+
29
  transformed_proxies = []
30
 
31
  for proxy in proxies_list:
32
+ if isinstance(proxy, str):
33
+ # 如果proxy是字符串,说明使用了正则表达式解析,需要进一步处理
34
+ proxy = dict(item.split(': ') for item in proxy.split(', '))
35
+
36
+ if proxy.get('type') == 'ss':
37
+ name = proxy.get('name', '')
38
+ server = proxy.get('server', '')
39
+ port = proxy.get('port', '')
40
+ cipher = proxy.get('cipher', '')
41
+ password = proxy.get('password', '')
42
+ udp = 'true' if proxy.get('udp') == 'true' else 'false'
43
 
44
  transformed = f"{name} = ss, {server}, {port}, encrypt-method={cipher}, password={password}, udp-relay={udp}"
45
  transformed_proxies.append(transformed)
46
 
47
+ return "\n".join(transformed_proxies) if transformed_proxies else "未找到有效的SS代理配置"
48
 
49
  class RequestHandler(BaseHTTPRequestHandler):
50
  def do_GET(self):
 
55
  url = query_params['url'][0]
56
  try:
57
  response = requests.get(url)
58
+ response.raise_for_status() # 这将抛出HTTPError,如果响应状态码不是200
59
+ input_text = response.text
60
+ result = extract_and_transform_proxies(input_text)
61
+ self.send_response(200)
62
+ self.send_header('Content-type', 'text/plain; charset=utf-8')
63
+ self.end_headers()
64
+ self.wfile.write(result.encode('utf-8'))
 
 
65
  except requests.RequestException as e:
66
  self.send_error(500, f"Error fetching data: {str(e)}")
67
  else:
68
  self.send_error(400, "Missing 'url' parameter")
69
 
70
+ def log_message(self, format, *args):
71
+ # 重写此方法以禁用默认的服务器日志
72
+ pass
73
+
74
  def run_server(port=8080):
75
  server_address = ('', port)
76
  httpd = HTTPServer(server_address, RequestHandler)