本文目录导读:

我来帮你编写一个自动剔除失效代理的脚本,以下是几种常见的实现方式:
基于HTTP代理的测试脚本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
自动剔除失效代理脚本 - HTTP/HTTPS代理检测
"""
import requests
import threading
from queue import Queue
import time
import json
class ProxyTester:
def __init__(self, test_url="http://httpbin.org/ip", timeout=5, max_workers=10):
self.test_url = test_url
self.timeout = timeout
self.max_workers = max_workers
self.valid_proxies = []
self.invalid_proxies = []
self.lock = threading.Lock()
def test_single_proxy(self, proxy):
"""测试单个代理"""
proxies = {
"http": proxy,
"https": proxy
}
try:
start_time = time.time()
response = requests.get(
self.test_url,
proxies=proxies,
timeout=self.timeout
)
response_time = time.time() - start_time
if response.status_code == 200:
with self.lock:
self.valid_proxies.append({
"proxy": proxy,
"response_time": round(response_time, 2),
"ip": response.json().get("origin", "unknown")
})
return True
except:
with self.lock:
self.invalid_proxies.append(proxy)
return False
def test_proxies(self, proxy_list):
"""并发测试代理列表"""
self.valid_proxies = []
self.invalid_proxies = []
queue = Queue()
for proxy in proxy_list:
queue.put(proxy)
def worker():
while not queue.empty():
proxy = queue.get()
self.test_single_proxy(proxy)
queue.task_done()
# 创建线程池
threads = []
for _ in range(min(self.max_workers, len(proxy_list))):
thread = threading.Thread(target=worker)
thread.start()
threads.append(thread)
# 等待所有任务完成
queue.join()
for thread in threads:
thread.join()
return self.valid_proxies, self.invalid_proxies
def load_proxies(file_path):
"""从文件加载代理列表"""
proxies = []
try:
with open(file_path, 'r') as f:
for line in f:
proxy = line.strip()
if proxy and not proxy.startswith('#'):
proxies.append(proxy)
except FileNotFoundError:
print(f"文件 {file_path} 不存在")
return proxies
def save_proxies(proxies, file_path):
"""保存有效代理到文件"""
with open(file_path, 'w') as f:
for proxy in proxies:
if isinstance(proxy, dict):
f.write(f"{proxy['proxy']}\n")
else:
f.write(f"{proxy}\n")
def main():
# 配置参数
input_file = "proxies.txt" # 输入代理文件
valid_file = "valid_proxies.txt" # 有效代理输出文件
invalid_file = "invalid_proxies.txt" # 无效代理输出文件
# 加载代理
proxies = load_proxies(input_file)
if not proxies:
print("没有找到要测试的代理")
return
print(f"加载了 {len(proxies)} 个代理")
# 创建测试器
tester = ProxyTester(
test_url="http://httpbin.org/ip",
timeout=5,
max_workers=20
)
# 测试代理
print("开始测试代理...")
start_time = time.time()
valid, invalid = tester.test_proxies(proxies)
test_time = time.time() - start_time
# 输出结果
print(f"\n测试完成! 耗时: {test_time:.2f}秒")
print(f"有效代理: {len(valid)}")
print(f"无效代理: {len(invalid)}")
# 保存结果
if valid:
save_proxies(valid, valid_file)
print(f"有效代理已保存到 {valid_file}")
# 按响应时间排序
valid.sort(key=lambda x: x['response_time'])
print("\n最快的前10个代理:")
for i, proxy in enumerate(valid[:10], 1):
print(f"{i}. {proxy['proxy']} - {proxy['response_time']}s - IP: {proxy['ip']}")
if invalid:
save_proxies(invalid, invalid_file)
print(f"无效代理已保存到 {invalid_file}")
if __name__ == "__main__":
main()
SOCKS5代理测试脚本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
自动剔除失效代理脚本 - SOCKS5代理检测
"""
import socket
import socks
import requests
from concurrent.futures import ThreadPoolExecutor
class Socks5ProxyTester:
def __init__(self, test_url="http://httpbin.org/ip", timeout=5):
self.test_url = test_url
self.timeout = timeout
def test_proxy(self, proxy_str):
"""测试单个SOCKS5代理"""
try:
# 解析代理字符串 (格式: ip:port 或 user:pass@ip:port)
if '@' in proxy_str:
auth, addr = proxy_str.split('@')
username, password = auth.split(':')
ip, port = addr.split(':')
else:
ip, port = proxy_str.split(':')
username = password = None
port = int(port)
# 设置SOCKS5代理
socks.set_default_proxy(
socks.SOCKS5,
addr=ip,
port=port,
username=username,
password=password,
rdns=True
)
socket.socket = socks.socksocket
# 测试连接
start_time = time.time()
response = requests.get(
self.test_url,
timeout=self.timeout
)
response_time = time.time() - start_time
if response.status_code == 200:
return {
"proxy": proxy_str,
"response_time": round(response_time, 2),
"ip": response.json().get("origin", "unknown"),
"valid": True
}
except:
pass
finally:
# 重置socket
socket.socket = socket._socketobject
return {"proxy": proxy_str, "valid": False}
def test_proxies(self, proxy_list):
"""并发测试SOCKS5代理列表"""
results = {"valid": [], "invalid": []}
with ThreadPoolExecutor(max_workers=20) as executor:
futures = [executor.submit(self.test_proxy, proxy)
for proxy in proxy_list]
for future in futures:
result = future.result()
if result["valid"]:
results["valid"].append(result)
else:
results["invalid"].append(result["proxy"])
return results
简单Shell脚本版本
#!/bin/bash
# 自动剔除失效代理脚本 (Shell版本)
PROXY_FILE="proxies.txt"
VALID_FILE="valid_proxies.txt"
TIMEOUT=5
TEST_URL="http://httpbin.org/ip"
# 清空输出文件
> "$VALID_FILE"
# 检查代理文件
if [ ! -f "$PROXY_FILE" ]; then
echo "错误: 代理文件 $PROXY_FILE 不存在"
exit 1
fi
# 计数器
total=0
valid=0
invalid=0
echo "开始测试代理..."
echo "使用测试URL: $TEST_URL"
echo "----------------------------------------"
# 逐行读取代理并测试
while IFS= read -r proxy; do
# 跳过注释和空行
[[ -z "$proxy" || "$proxy" =~ ^# ]] && continue
((total++))
# 测试代理 (支持HTTP和HTTPS)
if curl -s -x "$proxy" --connect-timeout $TIMEOUT --max-time $((TIMEOUT * 2)) \
-o /dev/null -w "%{http_code}" "$TEST_URL" | grep -q "200"; then
echo "✓ [$total] 有效: $proxy"
echo "$proxy" >> "$VALID_FILE"
((valid++))
else
echo "✗ [$total] 无效: $proxy"
((invalid++))
fi
done < "$PROXY_FILE"
echo "----------------------------------------"
echo "测试完成!"
echo "总代理数: $total"
echo "有效代理: $valid"
echo "无效代理: $invalid"
echo "有效代理已保存到: $VALID_FILE"
使用说明
代理文件格式 (proxies.txt):
# HTTP/HTTPS代理 192.168.1.1:8080 192.168.1.2:3128 # 带认证的代理 user:pass@192.168.1.3:8080 # SOCKS5代理 (需要修改测试脚本) 192.168.1.4:1080
运行脚本:
# Python版本 python3 proxy_tester.py # Shell版本 (需要先授权) chmod +x proxy_tester.sh ./proxy_tester.sh
功能特点:
- ✅ 并发测试提高效率
- ✅ 支持HTTP/HTTPS/SOCKS5代理
- ✅ 自动识别有效和无效代理
- ✅ 输出响应时间进行排序
- ✅ 支持带认证的代理
- ✅ 错误处理和超时控制
选择适合你需求的版本,根据实际情况调整测试URL和超时时间即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播