如何验证 Smartproxy 代理:IP 白名单 vs 用户名/密码和粘性会话
在用户名/密码和 IP 白名单身份验证之间做出选择,选择轮换或粘性会话,并在自动化之前使用真实的 HTTP 和 SOCKS5 请求验证您的 Smartproxy 住宅或数据中心端点。
概述
Smartproxy 通过 HTTP(S) 和 SOCKS5 提供住宅和数据中心代理端点(住宅侧拥有 6500 万+ IP),采用固定月费套餐。两个早期的决定决定了您的设置是否一次成功:您使用哪种身份验证模式,以及请求应保持相同的出口 IP 还是轮换到新的 IP。
本指南涵盖这两个决定,并通过真实的命令行请求进行验证,以便您在将端点接入爬虫、排名跟踪器或浏览器配置文件之前确认其正常工作。
身份验证:用户名/密码或 IP 白名单
两种身份验证方式都在仪表板中配置:
- 用户名/密码 — 凭据随每个请求一起发送。可从任何机器、容器或 CI 运行器工作,并且在网络或 ISP 地址更改后仍然有效。
- IP 白名单 — 请求中不携带凭据,但您当前的公共 IP 必须注册。一旦您的 ISP 轮换您的地址或您移动到另一个网络,它就会停止工作。
除非您有固定的办公室 IP 且工具完全无法发送代理凭据,否则请使用用户名/密码。
会话类型:轮换或粘性
- 轮换 — 请求每次可以从不同的 IP 发出。这是未附加会话令牌时的行为,也是您在大规模采集时所需要的,此时每个 IP 的请求计数必须保持较低。
- 粘性 — 在会话令牌的生命周期内保持相同的出口 IP,这会将登录、加入购物车和结账等有状态流程保持在一个地址上。
Smartproxy 将会话和定位详细信息编码在代理用户名中。确切的参数语法是为您生成的,并且可能会更改,因此请始终从仪表板端点生成器复制现成的字符串,而不是凭记忆输入。下面的示例仅展示一般形式。
在住宅和数据中心端点之间选择
| 住宅 | 数据中心 | |
|---|---|---|
| 池 | 6500 万+ IP | 较小、稳定的范围 |
| 速度 | 中等 | 快速 |
| 最适合 | 地理精确采集、广告验证、价格检查 | 对容忍目标的高容量爬取、内部测试 |
| 阻止风险 | 较低,IP 分布广泛 | 较高,范围众所周知 |
两种端点类型的访问方式相同;只有主机、端口和凭据不同。
步骤
-
在仪表板中找到您的端点和凭据。
登录,打开您购买产品的代理设置页面,并复制端点主机和端口、您的代理用户名和密码,以及生成器注入到用户名中的任何会话或定位字符串。
export SP_USER='your-proxy-username' export SP_PASS='your-proxy-password' export SP_ENDPOINT='host:port' # 从仪表板粘贴确切值将凭据保存在环境变量或机密管理器中,而不是将其提交到脚本中。
-
选择您的身份验证模式。
用户名/密码是默认推荐。如果您更喜欢白名单,请记下您当前的公共 IP 并将其添加到仪表板身份验证设置中。
curl -sS https://ipinfo.io/ip每当您的 ISP 更改此地址时,请重新检查并重新添加;过时的白名单条目是突然出现
407错误的最常见原因。 -
验证轮换 HTTP 请求。
通过端点发送请求,并确认您看到的是代理 IP 而不是您自己的 IP。
curl -sS -x "http://${SP_USER}:${SP_PASS}@${SP_ENDPOINT}" https://ipinfo.io/json在循环中运行几次,以确认出口 IP 在请求之间确实发生变化。
for i in 1 2 3; do curl -sS -x "http://${SP_USER}:${SP_PASS}@${SP_ENDPOINT}" https://ipinfo.io/ip echo done如果地址从未改变,请检查您的用户名中是否仍嵌入有会话令牌。
-
使用粘性会话固定出口 IP。
从仪表板生成器复制粘性会话用户名(它是您的用户名加上会话标识符),并将其导出到单独的变量下,以便您可以在轮换和粘性字符串之间切换,而无需编辑凭据本身。
export SP_USER_STICKY='your-username-with-session-parameters' # 从仪表板复制for i in 1 2 3; do curl -sS -x "http://${SP_USER_STICKY}:${SP_PASS}@${SP_ENDPOINT}" https://ipinfo.io/ip echo done所有三个响应应在该会话令牌的生命周期内显示相同的出口 IP。
-
测试地理定位。
国家、城市和州定位也通过生成的用户名字符串传递。在您在其上构建按市场的工作流程之前,请确认请求落在您期望的位置。
export SP_USER_DE='your-username-with-country-parameter' # 从仪表板复制curl -sS -x "http://${SP_USER_DE}:${SP_PASS}@${SP_ENDPOINT}" https://ipinfo.io/json响应中的
country字段应与您配置的目标匹配。 -
测试 SOCKS5 端点。
使用
socks5h://方案,以便 DNS 解析在代理处而不是本地进行,从而防止泄漏和基于 DNS 的阻止。curl -sS -x "socks5h://${SP_USER}:${SP_PASS}@${SP_ENDPOINT}" https://ipinfo.io/json如果您的客户端仅支持
socks5://,则 DNS 在本地解析;在脚本中优先使用socks5h。 -
当吞吐量重要时切换到数据中心端点。
数据中心凭据和主机在仪表板中单独列出。针对数据中心主机和端口重新运行验证循环;只有端点值发生变化,请求格式不变。
export SP_DC_ENDPOINT='datacenter-host:port' curl -sS -x "http://${SP_USER}:${SP_PASS}@${SP_DC_ENDPOINT}" https://ipinfo.io/ip -
从 Python 使用端点。
重用相同的环境变量,以便从 shell 移动到脚本时无需更改任何内容。
import os import requests auth = f"{os.environ['SP_USER']}:{os.environ['SP_PASS']}@" endpoint = os.environ['SP_ENDPOINT'] proxies = { "http": f"http://{auth}{endpoint}", "https": f"http://{auth}{endpoint}", } response = requests.get("https://ipinfo.io/json", proxies=proxies, timeout=30) response.raise_for_status() print(response.json())对于粘性工作,从
SP_USER_STICKY构建第二个proxies字典,并在整个会话中使用它。 -
添加重试和轮换逻辑。
使用短指数退避处理
429和5xx响应,并让轮换会话在每次尝试时自然提供新的 IP,而不是重复重试同一会话。import time for attempt in range(4): try: response = requests.get("https://ipinfo.io/json", proxies=proxies, timeout=30) if response.status_code < 400: break except requests.RequestException: pass time.sleep(2 ** attempt)
故障排除
407 Proxy Authentication Required— 用户名或密码错误,会话或定位字符串被粘贴到错误的字段中,或者您白名单中的 IP 不再与您当前的地址匹配。请从仪表板生成器重新复制字符串。- 凭据在正常工作后被拒绝 — 包含
@、:、/或#的密码必须在代理 URL 中进行 URL 编码(@变为%40,:变为%3A)。如果您的工具无法编码它们,请优先使用没有特殊字符的密码。 curl: (7) Failed to connect— 主机或端口错误,或者您将住宅端点复制到了数据中心位置(或反之)。每个产品都有自己的主机和端口。- 每个请求返回相同的 IP — 用户名中仍然存在粘性会话令牌,或者您使用的是粘性凭据集而不是轮换凭据集。
- 粘性会话在工作流中途更改 IP — 会话生命周期到期。故意启动新的会话令牌并重新进行身份验证,而不是假设旧令牌会无限期持续。
- 请求仅在 SOCKS5 上超时 — 客户端可能不支持远程 DNS。切换到
socks5h://或回退到该工具的 HTTP 端点。 - 白名单身份验证间歇性失败 — 移动网络和家庭连接会轮换公共 IP。对于无人值守的工作,请使用用户名/密码。
总结
Smartproxy 入门归结为两个选择和一个习惯。除非您有真正静态的 IP,否则请选择用户名/密码,并为采集工作负载选择轮换会话,或为有状态流程选择粘性会话。习惯是直接从仪表板生成器复制端点和用户名字符串,因为会话和地理定位参数就在该字符串中。在将爬虫或排名跟踪器指向它们之前,请使用上面的简短 curl 循环验证轮换路径、粘性路径、SOCKS5 路径和数据中心主机。