main.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from nicegui import ui
  2. import httpx
  3. async def check_now_node(url_and_port):
  4. url = f"http://{url_and_port}"
  5. key = "/api/configs"
  6. full_url = url + key
  7. data = {"mode": "Global"}
  8. headers = {"Content-Type": "application/json"}
  9. async with httpx.AsyncClient() as client:
  10. try:
  11. response = await client.patch(full_url, json=data, headers=headers)
  12. if response.status_code != 204:
  13. raise Exception(f"请求失败: {response.status_code}")
  14. except httpx.HTTPError as exc:
  15. print(f"请求失败: {exc}")
  16. return None
  17. url_proxies = f"http://{url_and_port}/api/proxies"
  18. headers_proxies = {
  19. # 这里可以复用之前的headers
  20. "Accept": "application/json, text/plain, */*",
  21. "Host": url_and_port,
  22. # 其他可按需设置
  23. }
  24. try:
  25. response = await client.get(url_proxies, headers=headers_proxies)
  26. json_data = response.json()
  27. if not json_data or response.status_code != 200:
  28. print("JSON data is empty or request failed")
  29. return None
  30. proxies = json_data.get("proxies")
  31. proxy_global = proxies.get("GLOBAL")
  32. now_proxy = proxy_global.get("now")
  33. return now_proxy
  34. except httpx.RequestError as e:
  35. print(f"Request failed: {e}")
  36. return None
  37. async def handle_check_now_node():
  38. ip = '192.168.31.201'
  39. port_list = ['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', '58010']
  40. results = []
  41. for port in port_list:
  42. url_and_port = f"{ip}:{port}"
  43. now_proxy = await check_now_node(url_and_port)
  44. results.append(f"{url_and_port}: \t{now_proxy}")
  45. msg = "\n".join(results)
  46. print(msg)
  47. dialog = ui.dialog()
  48. with dialog:
  49. ui.label(msg).classes("whitespace-pre-wrap text-left")
  50. dialog.props("max-width=700px")
  51. dialog.open()
  52. def handle_switch_node():
  53. print("Switch IP button clicked")
  54. def main():
  55. with ui.row().classes("mx-auto"):
  56. ui.button("Check Now Node", on_click=handle_check_now_node).classes("mt-1")
  57. ui.button("Switch Node", on_click=handle_switch_node).classes("mt-1")
  58. ui.label("Filter Node").classes("text-lg font-bold text-blue-500 mt-4")
  59. ui.input(value="JP").classes("w-96")
  60. ui.run(port=48345)
  61. if __name__ in {"__main__", "__mp_main__"}:
  62. main()