Skip to content
Beginner / 2 min read

如何验证 Smartproxy 代理:IP 白名单 vs 用户名/密码和粘性会话

在用户名/密码和 IP 白名单身份验证之间做出选择,选择轮换或粘性会话,并在自动化之前使用真实的 HTTP 和 SOCKS5 请求验证您的 Smartproxy 住宅或数据中心端点。

HTTP(S) 隐私/匿名性 其他

概述

Smartproxy 通过 HTTP(S) 和 SOCKS5 提供住宅和数据中心代理端点(住宅侧拥有 6500 万+ IP),采用固定月费套餐。两个早期的决定决定了您的设置是否一次成功:您使用哪种身份验证模式,以及请求应保持相同的出口 IP 还是轮换到新的 IP。

本指南涵盖这两个决定,并通过真实的命令行请求进行验证,以便您在将端点接入爬虫、排名跟踪器或浏览器配置文件之前确认其正常工作。

身份验证:用户名/密码或 IP 白名单

两种身份验证方式都在仪表板中配置:

  • 用户名/密码 — 凭据随每个请求一起发送。可从任何机器、容器或 CI 运行器工作,并且在网络或 ISP 地址更改后仍然有效。
  • IP 白名单 — 请求中不携带凭据,但您当前的公共 IP 必须注册。一旦您的 ISP 轮换您的地址或您移动到另一个网络,它就会停止工作。

除非您有固定的办公室 IP 且工具完全无法发送代理凭据,否则请使用用户名/密码。

会话类型:轮换或粘性

  • 轮换 — 请求每次可以从不同的 IP 发出。这是未附加会话令牌时的行为,也是您在大规模采集时所需要的,此时每个 IP 的请求计数必须保持较低。
  • 粘性 — 在会话令牌的生命周期内保持相同的出口 IP,这会将登录、加入购物车和结账等有状态流程保持在一个地址上。

Smartproxy 将会话和定位详细信息编码在代理用户名中。确切的参数语法是为您生成的,并且可能会更改,因此请始终从仪表板端点生成器复制现成的字符串,而不是凭记忆输入。下面的示例仅展示一般形式。

在住宅和数据中心端点之间选择

住宅 数据中心
池 6500 万+ IP 较小、稳定的范围
速度 中等 快速
最适合 地理精确采集、广告验证、价格检查 对容忍目标的高容量爬取、内部测试
阻止风险 较低,IP 分布广泛 较高,范围众所周知

两种端点类型的访问方式相同;只有主机、端口和凭据不同。

步骤

  1. 在仪表板中找到您的端点和凭据。

    登录,打开您购买产品的代理设置页面,并复制端点主机和端口、您的代理用户名和密码,以及生成器注入到用户名中的任何会话或定位字符串。

    export SP_USER='your-proxy-username'
    export SP_PASS='your-proxy-password'
    export SP_ENDPOINT='host:port'   # 从仪表板粘贴确切值
    

    将凭据保存在环境变量或机密管理器中,而不是将其提交到脚本中。

  2. 选择您的身份验证模式。

    用户名/密码是默认推荐。如果您更喜欢白名单,请记下您当前的公共 IP 并将其添加到仪表板身份验证设置中。

    curl -sS https://ipinfo.io/ip
    

    每当您的 ISP 更改此地址时,请重新检查并重新添加;过时的白名单条目是突然出现 407 错误的最常见原因。

  3. 验证轮换 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
    

    如果地址从未改变,请检查您的用户名中是否仍嵌入有会话令牌。

  4. 使用粘性会话固定出口 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。

  5. 测试地理定位。

    国家、城市和州定位也通过生成的用户名字符串传递。在您在其上构建按市场的工作流程之前,请确认请求落在您期望的位置。

    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 字段应与您配置的目标匹配。

  6. 测试 SOCKS5 端点。

    使用 socks5h:// 方案,以便 DNS 解析在代理处而不是本地进行,从而防止泄漏和基于 DNS 的阻止。

    curl -sS -x "socks5h://${SP_USER}:${SP_PASS}@${SP_ENDPOINT}" https://ipinfo.io/json
    

    如果您的客户端仅支持 socks5://,则 DNS 在本地解析;在脚本中优先使用 socks5h。

  7. 当吞吐量重要时切换到数据中心端点。

    数据中心凭据和主机在仪表板中单独列出。针对数据中心主机和端口重新运行验证循环;只有端点值发生变化,请求格式不变。

    export SP_DC_ENDPOINT='datacenter-host:port'
    curl -sS -x "http://${SP_USER}:${SP_PASS}@${SP_DC_ENDPOINT}" https://ipinfo.io/ip
    
  8. 从 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 字典,并在整个会话中使用它。

  9. 添加重试和轮换逻辑。

    使用短指数退避处理 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 路径和数据中心主机。