
下载地址:
附源码和EXE文件
夸克链接:https://pan.quark.cn/s/9be6bb03e7f7
百度链接:
https://pan.baidu.com/s/1Ph4g-Ln2a4FDD2ZCEQCFgQ?pwd=tqdj
提取码:tqdj

Python源码:

源码解析:
import requests
import json
import os
import subprocess
import time
import sys
import logging
import tkinter as tk
from tkinter import scrolledtext
from threading import Thread, Event
这部分代码导入了程序所需的所有Python模块。例如,requests用于发起网络请求,logging用于日志记录,tkinter用于构建图形用户界面等。
# 设置输出编码为 UTF-8
这行注释说明了代码应该设置输出编码为UTF-8,但在实际代码中并没有设置。通常这会通过添加sys.stdout.reconfigure(encoding='utf-8')来实现。
class ScrolledTextHandler(logging.Handler):
# ...
ScrolledTextHandler类是自定义的日志处理器,它将日志信息输出到Tkinter的文本框中。这允许GUI显示日志信息。
def extract_proxy_info(data):
# ...
extract_proxy_info函数用于从API返回的数据中递归提取代理的IP地址、端口和地址信息。它定义了可能包含这些信息的键,并使用递归函数recursive_extract来搜索这些键。
def get_proxy(api_url):
# ...
get_proxy函数通过向API发送GET请求来获取代理信息,然后调用extract_proxy_info来解析这些信息。
def set_http_proxy(ip, port):
# ...
set_http_proxy函数设置了环境变量HTTP_PROXY和HTTPS_PROXY,这样程序就可以通过指定的HTTP代理进行网络请求。
def disable_http_proxy():
# ...
disable_http_proxy函数清除了HTTP_PROXY和HTTPS_PROXY环境变量,从而禁用了HTTP代理。
def set_windows_proxy(ip, port):
# ...
set_windows_proxy函数通过修改Windows注册表来设置全局代理,这样所有通过Windows系统进行的网络请求都会使用这个代理。
def disable_windows_proxy():
# ...
disable_windows_proxy函数通过修改注册表来禁用全局代理。
def check_baidu():
# ...
check_baidu函数尝试访问百度,检查HTTP状态码是否为200,以验证代理是否有效。
def run_proxy(api_url, stop_event, switch_interval):
# ...
run_proxy函数包含了代理切换的循环逻辑。它在一个循环中定期获取新的代理,并根据stop_event的信号来停止代理切换。
class App:
# ...
App类定义了应用程序的GUI组件和逻辑。它初始化GUI元素,定义了启动和停止代理的按钮,并处理相关的事件。
if __name__ == "__main__":
# ...
程序的入口点,创建Tkinter的主窗口,实例化App类,并启动GUI的主事件循环。