【Python】定时更换clashx工具


An empty street
An empty house
A hole inside my heart
I’m all alone
The rooms are getting smaller
I wonder how
I wonder why
I wonder where they are
The days we had
The songs we sang together
Oh yeah
And oh, my love
I’m holding on forever
Reaching for a love that seems so far
                     🎵 Westlife《My Love》


import requests

import time
from loguru import logger

# LOCAL_IP = "127.0.0.1"  # 本地IP地址,根据实际情况修改
LOCAL_IP = "233.233.233.233"  # 远程IP地址,根据实际情况修改


CLASH_API_URL_TEST = f"http://{LOCAL_IP}:9089"  # Clash的API地址,根据实际情况修改
CLASH_API_URL_ONLINE = f"http://{LOCAL_IP}:9090"  # Clash的API地址,根据实际情况修改

URL_TEST = f"{CLASH_API_URL_TEST}/proxies/Proxy"
URL_ONLINE = f"{CLASH_API_URL_ONLINE}/proxies/Proxy"

SWITCH_INTERVAL = 7  # 切换间隔时间,单位为秒

PROXY_TEST = {"http": f"http://{LOCAL_IP}:7776", "https": f"http://{LOCAL_IP}:7776"}
PROXY_ONLINE = {"http": f"http://{LOCAL_IP}:7777", "https": f"http://{LOCAL_IP}:7777"}

def switch_proxy_test():

    group_status = requests.get(URL_TEST).json()

    now = group_status["now"]
    all_proxies = group_status["all"]
    next_index = (all_proxies.index(now) + 1) % len(all_proxies)
    next_proxy = all_proxies[next_index]
    data = {"name": next_proxy}
    response = requests.put(URL_TEST, json=data)
    if response.status_code == 204:
        logger.info(f"Test:Successfully switched to next proxy: {next_proxy}")
        return next_proxy
    else:
        logger.info("Test:Failed to switch proxy")
        return False

def check_proxy(check_url,proxy,remark=""):

    resp = requests.get(check_url, proxies=proxy)
    if resp.status_code == 200:
        logger.info(f"{remark}:Proxy is available: {resp.json()['origin']}")
        return True
    else:
        logger.info(f"{remark}:Proxy is unavailable: {resp.status_code}")
        return False
def switch_proxy_online(next_proxy):

    data = {"name": next_proxy}
    response = requests.put(URL_ONLINE, json=data)
    if response.status_code == 204:
        logger.info(f"Online:Successfully switched to next proxy: {next_proxy}")
        return True
    else:
        logger.info("Online:Failed to switch proxy")
        return False


if __name__ == "__main__":
    check_url = "http://httpbin.org/ip"
    for _ in range(10):
        logger.info(f"SWITCH_INTERVAL:{SWITCH_INTERVAL}")
        if next_proxy:=switch_proxy_test():
            if is_ok := check_proxy(check_url,PROXY_TEST,"Test"):
                if switch_proxy_online(next_proxy):
                    check_proxy(check_url,PROXY_ONLINE,"Online")
        time.sleep(SWITCH_INTERVAL)

相关推荐

  1. Python定时更换clashx工具

    2024-03-28 02:10:01       50 阅读
  2. Python 轻量级的定时任务调度工具

    2024-03-28 02:10:01       61 阅读
  3. 开发常用工具网站(不定时更新

    2024-03-28 02:10:01       68 阅读
  4. 工作日志- 不定期更新

    2024-03-28 02:10:01       46 阅读
  5. ArcGis Pro Python工具箱教程 03 工具箱工具定义

    2024-03-28 02:10:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 02:10:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 02:10:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 02:10:01       87 阅读
  4. Python语言-面向对象

    2024-03-28 02:10:01       96 阅读

热门阅读

  1. C语言学习笔记day15

    2024-03-28 02:10:01       43 阅读
  2. 116道网络安全面试题目总结

    2024-03-28 02:10:01       40 阅读
  3. 幸运儿(C语言)

    2024-03-28 02:10:01       41 阅读
  4. 磁盘阵列技术

    2024-03-28 02:10:01       39 阅读
  5. 【Linux】学习笔记~

    2024-03-28 02:10:01       38 阅读
  6. Linux查询日志常用命令整理

    2024-03-28 02:10:01       38 阅读
  7. C++ 大三/大五法则(__cplusplus 前向兼容)

    2024-03-28 02:10:01       40 阅读
  8. Linux编辑器-vim使用

    2024-03-28 02:10:01       42 阅读
  9. 纯CSS实现首尾相接的无限轮播效果

    2024-03-28 02:10:01       37 阅读
  10. 嵌入式Linux:空洞文件

    2024-03-28 02:10:01       38 阅读
  11. MySQL中的窗口函数

    2024-03-28 02:10:01       46 阅读
  12. 【嵌入式DIY实例】-火焰报警系统

    2024-03-28 02:10:01       39 阅读
  13. 编程实现喝汽水问题

    2024-03-28 02:10:01       34 阅读