使用Python测试代理IP池深度

发布时间2025-06-26 05:06:59

本工具采用 Python 的 asyncio 异步库结合 aiohttp,实现高并发异步请求代理测试。通过模拟多个请求轮次,可快速检测代理池中实际可用的不同IP数量,评估代理池的健康状况与深度。

假设你的请求 URL 是 https://example.com/api/data,代理是 http://proxy-ip:port,请根据实际替换。

1. 先确认是否是代理问题导致的 403

1.1 直接访问(不走代理)

curl -i https://example.com/api/data

如果这里也 403,说明不是代理问题,可能是权限、登录、请求头等原因。
如果返回正常,说明代理可能被目标服务器封禁或拒绝。

1.2 使用代理访问

curl -i -x http://proxy-ip:port https://example.com/api/data

如果代理访问返回 403,说明代理 IP 被拒绝,或者代理请求特征被检测到。

2. 检查请求头问题

2.1 默认 curl 请求头(User-Agent 很简陋)

curl -i https://example.com/api/data

如果返回 403,试试加上常见浏览器 User-Agent:

curl -i -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://example.com/api/data

如果加了 User-Agent 后能访问,说明是请求头导致的拒绝。

2.2 添加 Referer 和 Accept

curl -i \
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \
  -H "Referer: https://example.com" \
  -H "Accept: text/html,application/xhtml+xml" \
  https://example.com/api/data

有些网站会校验来源 Referer。

3. 测试是否需要登录态(Cookie/Token)

如果你知道接口需要登录,测试时加上 Cookie 或授权头:

curl -i \
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \
  -H "Cookie: sessionid=xxxxxx" \
  https://example.com/api/data

或者带 Token:

curl -i \
  -H "Authorization: Bearer your_token_here" \
  https://example.com/api/data

如果带了登录态后能访问,说明之前 403 是权限问题。

4. 检查代理特征是否暴露

用代理访问时,抓取返回头看看是否有代理相关字段:

curl -i -x http://proxy-ip:port https://example.com/api/data

查看响应头是否有 ViaX-Forwarded-For 等代理标记,某些服务器会检测到这些并拒绝。

5. 测试频率限制或 WAF 防护

尝试多次快速请求,看是否触发 403:

for i in {1..10}; do
  curl -s -o /dev/null -w "%{http_code}\n" https://example.com/api/data
done

如果开始正常,后来突然变 403,可能触发了防火墙。

6. 详细抓包分析(用 curl + verbose)

使用 curl 详细模式,查看请求完整过程:

curl -v -i https://example.com/api/data

如果用代理:

curl -v -i -x http://proxy-ip:port https://example.com/api/data

观察请求和响应头,服务器返回的 403 中是否有特定错误信息。

7. 用浏览器抓包对比请求差异

  • 使用 Chrome/Firefox 打开目标 URL,打开开发者工具 → 网络 → 找到对应请求,右键复制为 curl(带请求头、cookie)
  • 将浏览器的 curl 命令直接粘贴终端运行,观察是否仍 403
  • 如果浏览器请求成功,命令行请求失败,说明命令行请求缺少某些重要头或登录信息

总结

测试点 命令示例 可能原因
直连是否 403 curl -i URL 服务器权限或登录限制
代理访问是否 403 curl -i -x PROXY URL 代理被封禁或识别
User-Agent 缺失 curl -i -H "User-Agent:..." URL 服务器屏蔽默认 curl UA
Referer 缺失 -H "Referer:..." 需要指定来源
Cookie/Token 缺失 -H "Cookie:..."Authorization 需要登录状态
频率限制/WAF 快速循环请求 触发服务器防护
代理头暴露 检查 Via、X-Forwarded-For 被识别为代理访问
抓包对比 浏览器抓包复制 curl 请求头/登录态缺失

你可以按顺序执行以上步骤,定位403出现在哪一步。

如果需要,我可以帮你写一份专门的脚本自动检测这些因素,也可以帮你分析某个具体命令输出。你觉得呢?