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)
|