附源码和EXE文件
夸克链接:https://pan.quark.cn/s/9be6bb03e7f7
(PS:点击阅读原文也可跳转)
https://pan.baidu.com/s/1Ph4g-Ln2a4FDD2ZCEQCFgQ?pwd=tqdj
导入模块
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
requests
用于发起网络请求,logging
用于日志记录,tkinter
用于构建图形用户界面等。设置输出编码
# 设置输出编码为 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
来搜索这些键。从API获取代理IP和端口
def get_proxy(api_url):
# ...
get_proxy
函数通过向API发送GET请求来获取代理信息,然后调用extract_proxy_info
来解析这些信息。配置HTTP代理
def set_http_proxy(ip, port):
# ...
set_http_proxy
函数设置了环境变量HTTP_PROXY
和HTTPS_PROXY
,这样程序就可以通过指定的HTTP代理进行网络请求。关闭HTTP代理
def disable_http_proxy():
# ...
disable_http_proxy
函数清除了HTTP_PROXY
和HTTPS_PROXY
环境变量,从而禁用了HTTP代理。设置Windows全局代理
def set_windows_proxy(ip, port):
# ...
set_windows_proxy
函数通过修改Windows注册表来设置全局代理,这样所有通过Windows系统进行的网络请求都会使用这个代理。关闭Windows全局代理
def disable_windows_proxy():
# ...
disable_windows_proxy
函数通过修改注册表来禁用全局代理。访问百度并检查HTTP状态码
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__":
# ...
App
类,并启动GUI的主事件循环。