
用Python快速检测免费代理IP的可用性,参见如下
import requests
import concurrent.futures
from datetime import datetime
def test_proxy(proxy, test_url="http://www.baidu.com", timeout=3):
"""
测试单个代理IP是否可用
proxy: 代理地址,格式如 'http://123.45.67.89:8080'
test_url: 测试用的网址(可替换成需求的目标网站)
timeout: 超时时间(秒)免费代理建议设置 timeout=3-5 秒
"""
proxies = {
"http": proxy,
"https": proxy
}
try:
start_time = datetime.now()
response = requests.get(test_url, proxies=proxies, timeout=timeout)
latency = (datetime.now() - start_time).total_seconds() * 1000 # 毫秒
if response.status_code == 200:
# 检查返回的IP是否确实是代理IP(验证匿名性)
origin_ip = response.json().get("origin", "")
proxy_ip = proxy.split("://")[1].split(":")[0]
# 基本可用性检测
is_working = True
# 进阶:检查是否是透明代理(可选)
# 如果服务端能看见你的真实IP,则为透明代理
return {
"proxy": proxy,
"status": "✅ 可用",
"latency_ms": round(latency, 2),
"response_ip": origin_ip,
"anonymous": proxy_ip in origin_ip if origin_ip else False
}
else:
return {"proxy": proxy, "status": f"❌ HTTP {response.status_code}"}
except requests.exceptions.ConnectTimeout:
return {"proxy": proxy, "status": "❌ 连接超时"}
except requests.exceptions.ReadTimeout:
return {"proxy": proxy, "status": "❌ 读取超时"}
except requests.exceptions.ProxyError:
return {"proxy": proxy, "status": "❌ 代理错误"}
except requests.exceptions.SSLError:
return {"proxy": proxy, "status": "❌ SSL错误"}
except Exception as e:
return {"proxy": proxy, "status": f"❌ 错误: {type(e).__name__}"}
def batch_test_proxies(proxy_list, max_workers=20):
"""批量测试代理IP"""
print(f"开始测试 {len(proxy_list)} 个代理...\n")
available_proxies = []
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
# 提交所有任务
future_to_proxy = {
executor.submit(test_proxy, proxy): proxy
for proxy in proxy_list
}
# 收集结果
for i, future in enumerate(concurrent.futures.as_completed(future_to_proxy), 1):
result = future.result()
# 显示进度和结果
status_symbol = "✓" if "可用" in result.get("status", "") else "✗"
print(f"[{i:03d}/{len(proxy_list):03d}] {status_symbol} {result['proxy']:30} {result.get('status', '')}")
if "可用" in result.get("status", ""):
available_proxies.append(result)
# 输出统计信息
print(f"\n{'='*50}")
print(f"测试完成!")
print(f"总计测试: {len(proxy_list)} 个")
print(f"可用代理: {len(available_proxies)} 个")
print(f"可用率: {len(available_proxies)/len(proxy_list)*100:.1f}%")
# 按延迟排序并显示可用代理详情
if available_proxies:
print(f"\n可用代理列表(按延迟排序):")
available_proxies.sort(key=lambda x: x.get("latency_ms", 9999))
for i, proxy_info in enumerate(available_proxies[:10], 1): # 显示前10个
anon_status = "高匿" if not proxy_info["anonymous"] else "透明"
print(f"{i:2}. {proxy_info['proxy']:25} "
f"延迟:{proxy_info['latency_ms']:6.1f}ms "
f"匿名:{anon_status}")
return available_proxies
# ==================== 使用示例 ====================
if __name__ == "__main__":
# 示例代理列表(请替换为你的免费代理IP)获取免费代理
free_proxies = [
"http://103.152.112.162:80",
"http://45.77.56.213:3128",
"http://138.68.60.8:8080",
"http://207.244.229.34:8080",
"http://8.219.97.248:80",
"http://47.88.11.3:8080",
"http://20.210.113.32:80"
]
# 执行批量测试
working_proxies = batch_test_proxies(free_proxies, max_workers=10)
# 可选:将可用代理保存到文件
with open("working_proxies.txt", "w", encoding="utf-8") as f:
for p in working_proxies:
f.write(f"{p['proxy']}\n")
print(f"\n可用代理已保存至 working_proxies.txt")

test_proxy函数):
batch_test_proxies函数):
test_proxy函数):
batch_test_proxies函数):
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。