下面为你提供一套开箱即用、稳定高效的Python批量检测代理IP可用性的脚本,支持HTTP/HTTPS代理,自带超时控制与多线程加速,复制即可直接运行,满足日常批量验证代理的需求。

核心检测思路
核心逻辑拆解
批量检测代理IP的核心逻辑围绕“高效验证+结果留存”展开,具体分为5个步骤:
- 读取待检测的代理IP列表,统一格式为
ip:port; - 借助中立测试网站(如httpbin.org)发送请求,验证代理的连通性;
- 设置合理超时时间,避免单个无效代理拖慢整体检测进度;
- 采用多线程并行检测,大幅提升批量验证的效率;
- 自动筛选可用代理并保存到本地文件,方便后续直接调用。
完整可运行Python脚本
import requests
from concurrent.futures import ThreadPoolExecutor
import time
# ===================== 配置区 =====================
# 待检测的代理列表,格式:ip:port
PROXY_LIST = [
"123.123.123.123:8080",
"114.114.114.114:8888",
"223.223.223.223:9999",
# 在这里添加你的代理IP
]
# 检测超时时间(秒),建议 5~10 秒
TIMEOUT = 5
# 线程数,批量检测时用,建议 10~30
MAX_WORKERS = 20
# 测试用的验证地址(返回本机IP,最适合检测代理)
TEST_URL = "https://httpbin.org/ip"
# ===================================================
def check_proxy(proxy: str) -> tuple[bool, str]:
"""
检测单个代理是否可用
:param proxy: 代理IP,格式 ip:port
:return: (是否可用, 代理字符串)
"""
proxies = {
"http": f"http://{proxy}",
"https": f"https://{proxy}"
}
try:
# 发送测试请求
response = requests.get(
TEST_URL,
proxies=proxies,
timeout=TIMEOUT,
verify=False # 关闭SSL验证,避免证书错误
)
# 请求成功 = 代理可用
if response.status_code == 200:
return True, proxy
return False, proxy
except Exception as e:
# 超时、连接失败、拒绝连接等都判定为不可用
return False, proxy
def batch_check_proxies(proxy_list: list) -> list:
"""
多线程批量检测代理
"""
valid_proxies = []
total = len(proxy_list)
start_time = time.time()
print(f"[*] 开始检测 {total} 个代理,线程数:{MAX_WORKERS}\n")
# 多线程执行
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
results = executor.map(check_proxy, proxy_list)
# 遍历结果
for idx, (is_valid, proxy) in enumerate(results, 1):
status = "✅ 可用" if is_valid else "❌ 不可用"
print(f"[{idx}/{total}] {proxy} -> {status}")
if is_valid:
valid_proxies.append(proxy)
# 统计结果
cost_time = round(time.time() - start_time, 2)
print(f"\n[*] 检测完成!耗时:{cost_time}s")
print(f"[+] 可用代理总数:{len(valid_proxies)}/{total}")
return valid_proxies
def save_valid_proxies(valid_list: list, filename: str = "valid_proxies.txt"):
"""
保存可用代理到文件
"""
with open(filename, "w", encoding="utf-8") as f:
for proxy in valid_list:
f.write(proxy + "\n")
print(f"[+] 可用代理已保存到:{filename}")
if __name__ == "__main__":
# 关闭SSL警告
requests.packages.urllib3.disable_warnings()
# 1. 批量检测
valid_list = batch_check_proxies(PROXY_LIST)
# 2. 保存结果
if valid_list:
save_valid_proxies(valid_list)
else:
print("[!] 未检测到可用代理")
脚本使用全指南
1. 安装依赖
脚本仅依赖requests库,打开终端执行以下命令完成安装:
pip install requests
2. 配置代理列表
找到脚本中的PROXY_LIST变量,将待检测的代理IP替换为自己的列表,格式必须为"ip:端口";若代理需要账号密码,格式改为"用户名:密码@ip:端口"。
3. 运行脚本
直接运行Python脚本,终端会实时输出每个代理的检测结果,检测完成后,可用代理会自动保存到本地valid_proxies.txt文件中。
为什么业务场景更推荐专业代理IP服务
批量检测后你会发现,免费代理大多存在失效快、稳定性差的问题,无法满足广告监测、跨境业务、数据采集等长期业务需求。此时,专业代理IP服务能从根源解决这些问题,青果网络是不少相关场景的选择,具体优势如下:
千万级资源池覆盖
青果网络拥有千万级资源池,海外代理IP覆盖全球200多个国家与地区,国内代理IP覆盖200多个城市与地区,能为跨境业务、全球数据采集等场景提供稳定的访问支持,避免因资源不足导致的业务中断。
多场景适配能力
针对不同业务场景的需求,青果网络的代理IP服务可灵活适配调度逻辑,比如广告监测场景需要高频次稳定访问,跨境电商场景需要不同地区的代理资源,都能得到对应支持。
合规与安全保障
在代理IP使用过程中,青果网络提供合规支持与安全保障,确保业务访问符合相关规则,降低访问环境暴露风险,保障业务连续性。
高效接入与技术支持
青果网络提供工程化接入支持,帮助快速完成代理IP服务的落地,同时有专业的服务响应团队,及时解决接入和使用过程中的问题,提升业务落地效率。
总结
本文提供的Python脚本开箱即用,支持批量检测HTTP/HTTPS代理IP的可用性,通过多线程与超时控制保障检测效率与稳定性;检测完成后可用代理自动保存到本地文件,方便直接调用;对于长期业务需求,专业代理IP服务能解决免费代理的稳定性、合规性问题,更适合企业级业务场景。
常见问题解答
Q1:脚本支持SOCKS5代理吗?
A1:当前脚本默认支持HTTP/HTTPS代理,若需要支持SOCKS5代理,可修改proxies配置,将协议改为socks5://,同时需安装socksio或requests[socks]依赖。
Q2:为什么很多免费代理检测后显示不可用?
A2:免费代理的生命周期短、使用人数多,大多会快速失效,这是正常现象,若需长期稳定使用,建议选择专业代理IP服务。
Q3:如何从本地TXT文件读取代理列表进行检测?
A3:可在脚本中添加文件读取逻辑,比如通过with open("proxies.txt", "r", encoding="utf-8") as f: PROXY_LIST = [line.strip() for line in f if line.strip()]代码,直接读取本地TXT中的代理列表。