为什么近亲要被禁?
当目标网站从特定IP地址或地址范围中阻断流量时,即发生代理禁令. 网站通过各种信号确定,来自该IP的流量是自动化的、滥用的,或者以其他方式不受欢迎的,它拒绝满足其进一步的请求。
了解为何实施禁令是防止禁令的第一步。 无论你是 正在删除网站,监测价格,或跟踪 应急方案了解检测信号和如何减缓信号 将会大大提高你的成功率
常见禁止触发器
1. 请求过多
最基本的检测信号是请求率. 如果单个IP每秒向同一网站发送100个请求,那显然不是人类浏览. 大多数网站设定了速率限制——超过时触发块或CAPTCHA的阈值. 这些限制差别很大:有些网站允许每IP每分钟10个请求,而另一些网站则容忍数百个请求.
2. 已知的代理/相邻IP范围
IP情报服务(MaxMind, IPinfo, IP2Location)将IP按类型分类. Datacenter IP容易识别,因为它们属于主机供应商ASN(AWS,Google Cloud,OVH). 许多网站从已知的数据中心IP范围自动封锁或挑战所有流量. 这就是为什么 住宅代办 成功率较高——其实施伙伴被归类为消费者联系。
3. IP声誉黑名单
多个服务维持已知用于刮刮、垃圾邮件或其他自动化活动的IP地址黑名单。 当您的代理IP出现在这些列表中时,订阅黑名单服务的网站会先发制人地屏蔽您——甚至在您发出单一请求之前. 联合健康监测 帮助提供者从旋转中移除黑名单IP.
4. 可疑请求模式
即使以合理的要求率,您的流量模式也可以显示自动化:
- 统一时间: 要求精确间隔( 每2.0秒) 而不是人类浏览的随机间隔
- 序列访问 : 按字母或数字顺序而不是按自然导航路径访问页面
- 没有子资源加载 : 真实浏览器加载图像, CSS, JavaScript, 和字体—— 仅获取 HTML 的剪贴机
- 缺少裁判信头 : 浏览器在页间浏览时总是会发送裁判器;刮刮器通常不会
- 异常深度第一模式 : 爬进深层的类别 然后再移动到下一个 而不是像人类一样浏览
5. 指纹不符
反机器人系统 连接多个信号来构建访问者配置 。 当这些信号相互矛盾时,访客被标注:
- 地理错配 : IP说德国,但浏览器的时区是美国太平洋,接受语言是
en-US - TLS 指纹 : TLS客户端 Hello 签名与声称的浏览器不符(例如 Python 请求库自称为 Chrome)
- Java脚本执行 : 无头浏览器可能无法完全执行的浏览器API的瓶检测脚本测试
- WebRTC 泄漏 : WebRTC 如果配置不当, 可以曝光代理服务器背后的真实IP
6. 重点子网交通
如果来自同一24子网的多个IP(如185.23.100.1至185.23.100.254)全部点击同一网站,该网站可能会封锁整个子网. 不错 IP 旋转 算法确保连续请求之间的子网多样性.
7. 会话和饼干异常
网站在首次访问时设置了饼干,并期望在随后提出请求时能够这样做. 不维护饼干的Scrapers, 提供过期的饼干, 或显示不一致的会话状态( 在一个请求上登录, 在下一个请求上匿名) 触发怀疑 。
禁区和区块类型
| 块类型 | 感觉如何 | 严重性 | 恢复 |
|---|---|---|---|
| CAPTCHA 挑战 | CAPTCHA 页面代替内容 | 软块 | 旋转 IP, 慢点 |
| HTTP 403 禁止使用 | 被拒绝访问 | 中块 | 旋转 IP, 更改指纹 |
| HTTP 429 请求过多 | 超过比率限制 | 软块 | 等待和重试, 降低速率 |
| 空/ 损坏的响应 | 空白页面或垃圾数据 | 隐形块 | 用不同的 IP 校验 |
| 重定向到块页 | 发送到"封锁"通知 | 中块 | 旋转 IP, 检查页眉 |
| IP 黑名单 | 连接超时或重设 | 硬块 | IP被烧毁,使用不同的 |
| 子网/ASN 禁令 | 范围中的所有IP被屏蔽 | 硬块 | 切换到不同的 ASN |
预防战略
保护目标使用住宅代理
住宅代理机构 有ISP分配给真实家庭的IP. 他们通过 ASN 级别检查 屏蔽数据中心IP。 对于具有强大反机器人保护能力的网站,住宅代用品是基线要求. 对于最具攻击性的目标,由于CGNAT IP共享,移动代理提供了甚至更高的信任.
执行智能利率限制
不要像连接允许的那样快击中目标 相反:
- 研究对象的速率限制(尝试提升请求频率,直到看到429s或CAPTCHA)
- 在请求之间添加随机延迟( 例如, 1-5 秒与 jitter)
- 将请求分期分发,而不是分批发送
- 对不同的端点使用不同的速率限制(搜索页面对产品页面)
import time
import random
import requests
PROXY = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
for url in urls:
resp = requests.get(
url,
proxies={"http": PROXY, "https": PROXY},
timeout=15,
)
# Random delay between 1.5 and 4.5 seconds
time.sleep(random.uniform(1.5, 4.5))
智能旋转 IP
IP 旋转 在多个地址之间分配交通量。 但轮换必须与其他战略相结合:
- 按请求旋转独立页面获取
- 对需要会议连续性的多步骤工作流程使用粘性会话
- 确保子网的多样性——不要连续发送来自同一/24范围的请求
- 将旋转策略与目标的敏感性相匹配——更具攻击性的场地需要更快的旋转.
设置现实信头
每个请求都应包含匹配真实浏览器的页眉:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
}
将用户代理字符串旋转到一组流行的当前浏览器中。 确保用户代理匹配TLS指纹——在发送Python TLS签名时自称为Chrome是即时红旗.
对齐地理信号
使用时 地理目标代号,将所有请求的元数据与代理服务器的位置对齐:
- 设定
Accept-Language与该国的主要语言相匹配 - 如果使用浏览器自动化, 请设置时区以匹配代理服务器的地理
- 禁用 WebRTC 防止真实IP 泄漏
适当处理饼干和会议
在会话内保持 cookie 覆盖请求 。 使用会话对象( 如 requests.Session() 在 Python 中),自动处理 cookie 持久性. 旋转IP时,也开始一个新鲜的饼干罐——不要从一个IP携带饼干到另一个IP,因为这会造成不一致.
回收技术
早期检测禁令
别等到整个输油管都坏了 禁用信号监视器 :
- 每个目标域的追踪成功率——突然下降表明禁令已经开始
- 注意CAPTCHA的页面(检查CAPTCHA指标的反应机构)
- 监测响应大小——被封锁的响应往往比真实的页面小得多
- 检查响应时间——一些站点故意对疑似bots(tarpit)反应缓慢
执行重试逻辑
import requests
from time import sleep
PROXY = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def fetch_with_retry(url, max_retries=3):
for attempt in range(max_retries):
resp = requests.get(
url,
proxies={"http": PROXY, "https": PROXY},
timeout=15,
)
if resp.status_code == 200 and len(resp.text) > 1000:
return resp
# Exponential backoff before retry (new IP via rotation)
sleep(2 ** attempt)
return None
升级战略
当块块持续, 升级你的方法:
- 第一个: 降低请求率并增加更多的随机延迟
- 第二个: 从数据中心切换到 住宅代办
- 第三个: 添加浏览器自动化( Puppeteer/ Playwright) 执行 JavaScript 和通过浏览器检查
- 第四点: 实施完整的指纹管理(TLS、画布、WebGL)
- 第五点: 使用移动代理进行最高信任IP分类
钥匙外卖 : 代理禁用是由信号组合引起的——不仅仅是IP地址. 预防禁令需要采取综合办法: 智能旋转真实的要求模式 正确的信头和一致的指纹 当禁令发生时,及早发现,并逐步提升战略。






