上个月中旬,监控面板上一个数字从 3% 跳到了 61%——我们招聘数据采集线的请求失败率。翻了半小时日志才确认不是我们自己的 bug:某头部招聘平台做了一次风控升级,返回 403 的响应里带 risk-control 标记的比例,从 12% 涨到了 78%。
这不是第一次被打穿,但这次不一样。以前封了就换 IP,这次换了 IP 还是 403。
机房IP为什么在这轮升级里集体失效
我把 200 条失败样本拉出来对齐,发现规律很清晰:能过列表页的 IP,详情页一律 403;反过来几乎不存在。也就是说,风控对同一个 IP 在不同页面给了不同的信任等级。
再往下挖,根因是 IP 的归属属性被纳入了评分。数据中心 IP 的 ASN 前缀是公开可查的,风控侧直接拉 IDC 段做整段降权,不再局限于单个 IP 维度。我们那批 800 个机房 IP,两天后只剩 37 个还能出详情页,存活率 4.6%。
说白了,招聘类站点已经从"限频"转向"验身份"。机房 IP 在这个场景下慢不慢已经不重要了,它根本不给你排队的机会。这也是我这两周把预算往住宅代理IP上迁的直接原因。
三档住宅代理的72小时实测数据
测试条件统一:同一份 2 万个岗位 URL 的任务,覆盖 4 个目标站(含两个强风控的),三个档位各跑 10 万请求,连续 72 小时,失败重试 3 次后计为最终失败。数据如下。
| 档位 | 计价方式 | 单IP成本 | 平均延迟 | 24h可用率 | 封禁率 | 折合单请求成本 |
|---|
| 按量动态住宅 | 按提取IP数计费 | 0.0025–0.006 元 | 340 ms | 91.8% | 7.4% | 0.0011 元 |
| 隧道动态住宅 | 按天/并发计费 | 16–30 元/天 | 270 ms | 96.9% | 2.6% | 0.0008 元 |
| 独享静态住宅 | 按IP/天计费 | 1.5–3 元 | 190 ms | 99.4% | 0.6% | 0.0042 元 |
有个反直觉的地方:我一开始以为按量提取最省钱,跑了一周才发现详情页封禁率反而是三档里最高的。7.4% 的封禁率叠上重试,单请求成本被吃回到 0.0016 元,比隧道还贵一倍。
隧道代理在这套业务里是性价比拐点——它把 IP 调度从应用层挪到了网关层,你不用自己维护池子健康度。但如果你的任务需要登录态,隧道就不够用了,得看第三档。
按QPS走的选型决策树
我不太喜欢"各有优劣"式的结论,所以直接给判断路径。先算你业务端实际打到目标的 QPS,再往下走。
- 日请求 < 5 万,且只采列表页:第一档按量提取足够,池子挑城市覆盖广的,别纠结单价小数点后第三位。
- 日请求 5 万–200 万,列表+详情混跑:第二档隧道,重点配置会话粘性(下面讲)。
- 需要登录态、验证码后连续操作,或必须固定城市出口:第三档独享静态住宅,成本高但封禁率低到 0.6%,重试成本省回来一部分。
决策前先做一次小批量探测:抽 500 个 IP 统计 ASN 分布,如果头部三个 ASN 占比超过 50%,这家供应商在你的目标站面前基本等于一个大机房。
两个踩坑和一份排查清单
坑一:列表页和详情页用了不同出口 IP。招聘站会记录你从哪个 IP 看的列表,点进详情换 IP 会被判为异常跳转。我们把会话保持时长从 30 秒拉到 300 秒,封禁率从 2.6% 降到 0.8%,只改了这一个参数。
# 隧道代理用用户名后缀绑定会话,300秒内复用同一出口
proxy = "http://user-sess-k9x2a:pass@gateway.example.com:8000"
proxies = {"http": proxy, "https": proxy}
resp = requests.get(url, proxies=proxies, timeout=15)
坑二:池子大不等于分散。测过一家号称千万级池子的,抽 500 个 IP 做 ASN 统计,前三个 ASN 占了 61%。这种池子在段级封禁面前死得比小池子还整齐。
- 抽 500 IP 统计 ASN 与 C 段分布,头部 ASN 占比 > 50% 直接淘汰
- 压测 30 分钟,看可用率是否稳定在 95% 以上,还是前 10 分钟好看后段暴跌
- 确认会话粘性可配置,且时长能设到 300 秒以上
- 确认失败请求是否计费,这一项差异能占月度成本 15%
- 验证城市级切换的生效延迟,秒级和分钟级是两种体验
我们现在的组合是隧道打主力、独享静态兜登录态任务,隧道那部分接的是 mayihttp.com,3000 万级 IP 池加城市级切换,跑了两周没出现段级聚集的问题。选型表里的数字会随目标站风控变化,但判断逻辑能复用很久。