switch_proxy.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import json
  2. import httpx
  3. def load_config():
  4. with open("config.json", "r") as f:
  5. return json.load(f)
  6. config = load_config()
  7. START = 1
  8. END = config["total_container"]
  9. START_PORT = config["start_port"]
  10. START_API_PORT = config["start_web_port"]
  11. base_url_list = [f'http://192.168.31.201:{START_API_PORT + i}' for i in range(START, END + 1)]
  12. class ProxyManager:
  13. def __init__(self, base_url):
  14. self.base_url = base_url
  15. def switch_to_global(self):
  16. print(f"{self.base_url}/api/configs 切换全局代理")
  17. headers = {
  18. "accept": "application/json, text/plain, */*",
  19. "accept-encoding": "gzip, deflate, br, zstd",
  20. "accept-language": "zh-CN,zh",
  21. "connection": "keep-alive",
  22. "content-type": "application/json",
  23. "host": base_url.replace('http://', ''),
  24. "origin": base_url,
  25. "referer": base_url,
  26. "sec-ch-ua": '"Not A(Brand";v="8", "Chromium";v="132", "Brave";v="132"',
  27. "sec-ch-ua-mobile": "?0",
  28. "sec-ch-ua-platform": '"macOS"',
  29. "sec-fetch-dest": "empty",
  30. "sec-fetch-mode": "cors",
  31. "sec-fetch-site": "same-origin",
  32. "sec-gpc": "1",
  33. "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
  34. }
  35. data = {"mode": "Global"}
  36. try:
  37. with httpx.Client() as client:
  38. response = client.patch(self.base_url + "/api/configs", json=data, headers=headers)
  39. if response.status_code == 204:
  40. print(f"{self.base_url}/api/configs 切换全局代理成功")
  41. else:
  42. print(f"{self.base_url}/api/configs 切换全局代理失败 {response.status_code}")
  43. exit(1)
  44. except httpx.RequestError as exc:
  45. print(f"请求失败: {exc}")
  46. exit(1)
  47. def get_proxy_name(self):
  48. print(f'{self.base_url}/api/proxies 获取代理名称')
  49. try:
  50. response = httpx.get(self.base_url + "/api/proxies")
  51. response.raise_for_status()
  52. proxies = response.json()
  53. return proxies['proxies']['GLOBAL']['all'][2]
  54. except Exception as e:
  55. print(e)
  56. exit(1)
  57. def switch_proxy(self, proxy_name):
  58. print(f'{self.base_url}/api/proxies/GLOBAL 切换代理')
  59. try:
  60. target_url = self.base_url + '/api/proxies/GLOBAL'
  61. response = httpx.put(target_url, json={"name": proxy_name})
  62. if response.status_code == 204:
  63. print(f"切换代理成功: {proxy_name}")
  64. else:
  65. print(f"切换代理失败: {response.status_code} - {proxy_name}")
  66. exit(1)
  67. except Exception as e:
  68. print(f"切换代理失败: {e}")
  69. exit(1)
  70. for base_url in base_url_list:
  71. manager = ProxyManager(base_url)
  72. manager.switch_to_global()
  73. proxy_name = manager.get_proxy_name()
  74. if proxy_name:
  75. manager.switch_proxy(proxy_name)
  76. print('\n\n')