动态代理和静态代理的区别:轮换 IP、粘性会话和静态 IP 怎么选
动态代理和静态代理的区别一次讲清:轮换 IP 与粘性会话各适合什么任务,附按任务选择的对照表,并解释粘性会话为什么会提前结束。
动态代理和静态代理的区别,在于出口 IP 变不变。动态(轮换)代理每条请求换一个出口 IP;粘性会话在一组请求里保持同一个 IP;静态代理则在整个租期内都是同一个地址。选哪种,先问一句:你的请求之间有没有关联?商品目录这类互不相干的页面适合轮换,登录再加登录后的页面适合粘性会话。
很多人忘了还有第三种选择:一个可以连续几周归你用的静态 IP。本文把三种都讲一遍,给出按任务选择的对照表,并解释粘性会话为什么有时比你预想的结束得早。
轮换代理做什么
用轮换代理时,你只连一个网关,服务商为每个新连接挑一个不同的出口地址。你看不到、也不用管那份列表。
在 ProxyPanda 的住宅线路上,这就是控制台服务页面里的随机 IP 设置。保持开启,把客户端指向 HOST:PORT 并带上凭据,每条请求就会从不同的家庭网络出去。
轮换擅长分散负载。假如你要抓 5,000 个公开的商品页,轮换意味着没有哪个地址要发 5,000 条请求,也就没有哪个地址会触发频率限制。某条请求碰上了网站不喜欢的地址,重试一次,就会换一个。
有一个前提决定轮换对你是否有效:IP 是按连接变的,而很多 HTTP 客户端会复用连接。下文细说。
粘性会话做什么
粘性会话在多条请求之间保持同一个出口 IP。在住宅线路上,把服务在控制台里切到粘性 IP,并设定会话要保持多久。控制台会生成一个带会话 ID 的凭据,按显示的样子整串复制。用这个凭据发出的每条请求,都会在你设定的时长内、在网络能保持的范围内,从同一个地址出去。
粘性会话之所以存在,是因为网站会把请求串起来看。登录会写入一个 Cookie,如果带着这个 Cookie 的下一条请求来自另一户人家、另一个网络,网站是会注意到的。有的网站会把你登出,有的会弹验证码,有的会给账号打标记。在整个流程里保持 IP 不变,就能避开这些。
粘性会话的术语解释有一句话版本。
静态代理:第三种选择
轮换和粘性都是住宅 IP 池的使用模式:地址属于别人的家庭网络,来来去去。静态 IP 是另一种产品。
ISP 代理和数据中心代理按 IP 租用,租期由你选。租期结束之前地址都归你,不会因为谁家路由器重启就掉线,而且下单时可以选国家、地区和城市(ISP 线路还能选运营商)。想在静态 IP 上做轮换,就多租几个,在自己的代码里循环使用。
完整的对比是这样的:
| 轮换住宅(动态) | 粘性住宅 | 静态 ISP / 数据中心 | |
|---|---|---|---|
| 出口 IP | 每个连接换一个 | 一个会话内不变 | 整个租期内不变 |
| 能保持多久 | 一条请求 | 最长到你设定的时长,前提是那条家庭网络一直在线 | 直到租期结束 |
| 在 ProxyPanda 能否选国家 | 不能 | 不能 | 能:国家、地区、城市 |
| 计费 | 按 GB | 按 GB | 按 IP、按租期 |
| 轮换方式 | 自动完成 | 新开一个会话才换 | 自己循环列表 |
什么任务用哪种
| 任务 | 选择 | 原因 |
|---|---|---|
| 抓取公开的商品目录或列表页 | 轮换住宅;目标接受的话,用几个数据中心 IP 循环 | 页面互不相关,分散开能让每个地址都远低于频率限制 |
| 登录、购物车或任何多步表单 | 粘性住宅 | 每一步都依赖上一步,网站会通过 Cookie 和 IP 把它们关联起来 |
| 需要连续几周管理的账号后台 | 静态 ISP IP | 登录地址在不同网络、不同国家之间跳来跳去的账号会被标记 |
| 针对某一个国家的搜索排名查询 | 该国的静态 ISP 或数据中心 IP | 搜索结果取决于位置,而我们的住宅线路不能选国家 |
| 与位置无关的排名查询 | 轮换住宅 | 大量互不相关的查询,分散开发 |
| 从多个国家检查你的网站 | 静态 IP,每个国家一个 | 你需要知道每条请求来自哪里 |
关于这张表有两点说明。第一,抓公开内容时,先试数据中心再试住宅:很多网站接受数据中心 IP,住宅还是数据中心里有一个快速测试。第二,轮换是用来分散礼貌流量的。用它绕过网站对每位顾客的限购,或者在只允许一个账号的网站上跑很多账号,违反我们的使用规范。
具体到排名追踪,使用场景页面有完整的配置说明。
粘性会话为什么会提前结束
你设了一个时长,会话却更早结束了。这不是故障,住宅出口本来就是这样。常见原因:
- 那条家庭网络断了。 出口是某个人的路由器或手机。它重启了、没信号了,或者从 Wi-Fi 切到了蜂窝数据,那个地址就没了。
- 运营商给那户人家换了地址。 家庭宽带 IP 会不时被重新分配。
- 那个人退出了网络。 共享带宽的人随时可以停止。
- 你设定的时长到了。 值得先查这一条。
- 你的凭据变了。 密码串里的会话 ID 一变,你就进了一个新会话。在控制台里生成新会话,就是这个效果。
这些情况无论服务商多好都会发生,所以要在设计上考虑进去。流程开始时查一次出口 IP,在关键步骤之前再查一次,并且让登录步骤可以安全地重跑。
import requests
STICKY = "http://USERNAME:STICKY_PASSWORD@HOST:PORT"
proxies = {"http": STICKY, "https": STICKY}
def exit_ip():
return requests.get("https://api.ipify.org", proxies=proxies, timeout=30).text.strip()
start_ip = exit_ip()
# log in and do the first steps here
if exit_ip() != start_ip:
print("Session moved to a new IP; log in again before continuing.")
流程要短。只需要撑五分钟的粘性会话,比需要撑一小时的更容易撑到底。如果一个流程需要连续几天用同一个地址,它要的是静态 ISP IP。
Keep-alive 的坑
这个坑两个方向都有人掉进去。
HTTP 客户端会保持连接并复用它。对 https:// 目标来说,复用的连接就是穿过代理的同一条隧道,也就是同一个出口 IP。所以在随机 IP 模式下用 requests.Session 或 httpx.Client,看起来会像粘性的,于是有人报告轮换坏了。反过来,靠 keep-alive 偶然得到的“粘性”,在客户端新开连接的那一刻就没了。
用 Python 做代理轮换给出了两个库的解决办法。简单的规则是:想每条请求换 IP,就别复用连接;想保持同一个 IP,就用粘性凭据,别指望 keep-alive 替你保持。
快速问答
粘性代理和静态代理是一回事吗? 不是。粘性会话是在一段时间内保持一个住宅地址,可能提前结束。静态 ISP 或数据中心 IP 在整个租期内都归你。
粘性会话能保持多久? 时长在控制台里由你设定。在这个时长内,只要那条家庭网络在线,网络就会保持这个地址。
轮换和粘性哪个更贵? 两者是同一项住宅服务里的不同设置,都按你用掉的 GB 计费。价格见价格页。
静态 IP 能轮换吗? 能。多租几个,在代码里循环使用;上面那篇 Python 文章里有一个三行的示例。
轮换能让网站认不出我吗? 它换的是你的 IP。Cookie、登录状态、浏览器指纹和请求频率照样能识别一个客户端,所以轮换只是让流量看起来正常的其中一环。
下一步
按对照表选好模式,用一小笔充值跑一遍任务,把看到的出口 IP 和你的预期对一对。如果某个流程老是丢会话,把现象发到 Discord,会有人帮你判断它该缩短流程还是换静态 IP。