Update app.py
Browse files
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
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
|
|
|
|
|
|
|
|
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 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
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)
|