
想要批量检测代理IP是否可用?下面分享一款开箱即用、稳定高效的Python检测脚本,支持多线程批量检测、超时自动判定、格式错误过滤等功能,无需额外修改核心逻辑,复制即可直接运行。
完整可运行的Python代理IP检测脚本
import requestsfrom concurrent.futures import ThreadPoolExecutorimport time# ===================== 配置区 =====================# 待检测的代理IP列表(格式:ip:port 或 user:pass@ip:port)PROXY_LIST = ["123.123.123.123:8080","45.67.89.10:3128","11.22.33.44:1080",# 继续添加...]# 检测超时时间(秒)TIMEOUT = 5# 检测目标网址(能快速返回结果即可)TEST_URL = "https://httpbin.org/ip"# 线程数(批量检测用)MAX_WORKERS = 20# ===================================================def check_single_proxy(proxy: str) -> tuple:"""检测单个代理是否可用返回:(代理IP, 是否可用, 本机IP/错误信息)"""proxies = {"http": f"http://{proxy}","https": f"http://{proxy}"}try:# 发送请求,禁止自动重定向response = requests.get(TEST_URL,proxies=proxies,timeout=TIMEOUT,allow_redirects=False)# 状态码200表示代理连通成功if response.status_code == 200:origin_ip = response.json().get("origin", "未知")return (proxy, True, f"代理IP正常,出口IP:{origin_ip}")else:return (proxy, False, f"状态码异常:{response.status_code}")except requests.exceptions.ConnectTimeout:return (proxy, False, "连接超时")except requests.exceptions.ConnectionError:return (proxy, False, "连接失败")except requests.exceptions.ReadTimeout:return (proxy, False, "读取超时")except Exception as e:return (proxy, False, f"未知错误:{str(e)}")def batch_check_proxies(proxy_list: list) -> tuple:"""批量检测代理IP"""available_proxies = []unavailable_proxies = []print(f"开始检测,共 {len(proxy_list)} 个代理\n")# 多线程批量检测with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:results = executor.map(check_single_proxy, proxy_list)for res in results:proxy, is_ok, msg = resif is_ok:available_proxies.append(proxy)print(f"✅ 可用:{proxy} | {msg}")else:unavailable_proxies.append(proxy)print(f"❌ 不可用:{proxy} | {msg}")return available_proxies, unavailable_proxiesif __name__ == "__main__":start_time = time.time()# 执行检测valid, invalid = batch_check_proxies(PROXY_LIST)# 输出最终结果print("\n" + "="*50)print(f"检测完成!耗时:{time.time() - start_time:.2f}s")print(f"✅ 可用代理数量:{len(valid)}")print(f"❌ 不可用代理数量:{len(invalid)}")print("\n可用代理列表:")for p in valid:print(f"- {p}")
使用说明
1. 安装依赖
运行以下命令安装脚本所需的依赖库:
pip install requests
2. 替换代理列表
将配置区的PROXY_LIST替换为你需要检测的代理IP,支持两种格式:
- 无验证代理:
ip:port - 带账号密码验证的代理:
user:password@ip:port
3. 运行脚本
直接运行脚本,程序会自动输出每个代理的检测结果、最终可用代理清单及总耗时,方便快速筛选有效资源。
核心检测原理
- 出口IP验证:借助httpbin.org网站返回请求的出口IP,直接验证代理是否生效,确保检测结果准确。
- 超时控制:设置固定超时时间,超过时间未响应的代理直接判定为不可用,避免无效等待。
- 多线程加速:采用多线程同时检测多个代理,相比逐个检测效率提升数十倍,适合批量检测场景。
- 全面异常捕获:覆盖连接超时、连接失败、读取超时等常见异常场景,避免脚本因单个代理报错中断运行。
可选优化方案
更换检测网址
如果无法访问httpbin.org,可将配置区的TEST_URL替换为其他能快速返回结果的网址,例如:
TEST_URL = "https://www.baidu.com"
调整超时时间
根据网络环境调整TIMEOUT参数,网络条件较差时可适当调大超时时间,避免误判可用代理。
保存检测结果
将可用代理写入本地文件,方便后续直接使用,添加以下代码到脚本的if __name__ == "__main__"块中:
with open("可用代理.txt", "w", encoding="utf-8") as f:f.write("\n".join(valid))
专业代理IP服务的落地优势
如果你的业务需要长期稳定的代理IP资源,仅靠检测脚本筛选零散代理可能无法满足持续性需求,此时可以考虑专业的代理IP服务,青果网络的相关服务能适配多种业务场景。
海量资源覆盖能力
青果网络具备千万级资源池,海外代理IP覆盖全球200多个国家与地区,国内代理IP资源覆盖国内200多个城市与地区,能满足数据采集、跨境业务等场景的多地域访问需求。
稳定的资源调用保障
针对持续性业务使用需求,青果网络可支持稳定的资源调用,提升访问环境的一致性与稳定性,减少因资源波动导致的业务中断。
适配多场景的灵活性
无论是数据采集、广告监测还是跨境业务场景,青果网络的代理IP服务都能提供适配的资源支持,满足不同业务的访问需求。
总结
这款Python脚本可快速批量检测代理IP的可用性,支持多线程加速、异常捕获等功能,适合快速筛选零散代理资源;如果需要长期稳定的代理IP服务,可考虑青果网络的专业服务,其海量资源覆盖与稳定调用能力能更好支撑持续性业务需求,适配多种业务场景的访问要求。
常见问题解答
Q1:脚本支持带账号密码的代理检测吗?
A1:支持,只需将代理IP按user:password@ip:port的格式添加到PROXY_LIST列表中即可,脚本会自动处理认证逻辑。
Q2:检测超时时间可以根据网络环境调整吗?
A2:可以,只需修改配置区的TIMEOUT参数,网络环境较差时可适当调大超时时间,避免误判可用代理。
Q3:长期使用代理IP开展业务,如何保障稳定性?
A3:可以选择专业的代理IP服务,比如青果网络的代理IP服务,具备千万级资源池与稳定的调用能力,能为数据采集、跨境业务等场景提供持续可靠的资源支持,减少因资源不稳定带来的业务风险。