sfun commited on
Commit
87402ad
1 Parent(s): 8e6dd44

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -25
app.py CHANGED
@@ -5,23 +5,30 @@ from http.server import HTTPServer, BaseHTTPRequestHandler
5
  from urllib.parse import urlparse, parse_qs
6
 
7
  def extract_and_transform_proxies(input_text):
8
- proxies_match = re.search(r'proxies:\s*\n((?:{.*\n)*)', input_text)
9
- if not proxies_match:
10
- return "未找到proxies部分"
11
 
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 "未找到有效的代理配置"
@@ -30,16 +37,19 @@ def extract_and_transform_proxies(input_text):
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)
@@ -55,7 +65,7 @@ class RequestHandler(BaseHTTPRequestHandler):
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)
 
5
  from urllib.parse import urlparse, parse_qs
6
 
7
  def extract_and_transform_proxies(input_text):
8
+ print("原始输入数据:")
9
+ print(input_text)
10
+ print("------------------------")
11
 
12
+ # 尝试直接解析整个输入作为YAML
 
13
  try:
14
+ data = yaml.safe_load(input_text)
15
+ if isinstance(data, dict) and 'proxies' in data:
16
+ proxies_list = data['proxies']
17
+ else:
18
+ proxies_list = data
19
+ except yaml.YAMLError:
20
+ # 如果整个输入不是有效的YAML,尝试提取proxies部分
21
+ proxies_match = re.search(r'proxies:\s*\n((?:[-\s]*{.*\n?)*)', input_text, re.MULTILINE)
22
+ if proxies_match:
23
+ proxies_text = proxies_match.group(1)
24
+ try:
25
+ proxies_list = yaml.safe_load(proxies_text)
26
+ except yaml.YAMLError:
27
+ # 如果YAML解析失败,尝试使用正则表达式解析
28
+ proxies_list = re.findall(r'{(.*?)}', proxies_text, re.DOTALL)
29
+ proxies_list = [dict(item.strip().split(': ') for item in proxy.split(',')) for proxy in proxies_list]
30
+ else:
31
+ return "未找到proxies部分"
32
 
33
  if not proxies_list:
34
  return "未找到有效的代理配置"
 
37
 
38
  for proxy in proxies_list:
39
  if isinstance(proxy, str):
40
+ # 如果proxy是字符串,尝试解析为字典
41
+ try:
42
+ proxy = dict(item.strip().split(': ') for item in proxy.split(','))
43
+ except ValueError:
44
+ continue
45
+
46
  if proxy.get('type') == 'ss':
47
+ name = proxy.get('name', '').strip()
48
+ server = proxy.get('server', '').strip()
49
+ port = proxy.get('port', '').strip()
50
+ cipher = proxy.get('cipher', '').strip()
51
+ password = proxy.get('password', '').strip()
52
+ udp = 'true' if proxy.get('udp') in [True, 'true', 'True'] else 'false'
53
 
54
  transformed = f"{name} = ss, {server}, {port}, encrypt-method={cipher}, password={password}, udp-relay={udp}"
55
  transformed_proxies.append(transformed)
 
65
  url = query_params['url'][0]
66
  try:
67
  response = requests.get(url)
68
+ response.raise_for_status()
69
  input_text = response.text
70
  result = extract_and_transform_proxies(input_text)
71
  self.send_response(200)