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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值