You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用代理时如何防止源IP泄露引发网站封禁?

代理爬取时源IP泄露导致封禁的排查与解决

问题概况

  • 代码偶尔能正常运行,无核心逻辑问题
  • 发送几十次请求后,即便用旋转代理也会被封禁
  • 某代理提供商IP被封后,切换到另一提供商IP也立即被封
  • 尝试requests.session()和httpx.Client()均出现相同问题
  • 使用Brightdata廉价数据中心代理、proxy-cheap.com住宅代理
  • 会话创建方式:session = httpx.Client(proxies={"http://":proxy_url, "https://":proxy_url}),确保单请求用同一代理

推测源IP通过代理泄露导致封禁,寻求防止源IP泄露的方法。

排查与解决方法

1. 先验证代理是否真的隐藏了源IP

发送请求到能返回当前访问IP的测试接口,打印返回的IP地址,确认是否是代理IP而非你的真实源IP。如果返回真实IP,说明代理本身是透明代理或配置有误,直接联系提供商更换高匿代理。

2. 禁用HTTP/2与自动重定向

部分代理对HTTP/2支持不完善,可能导致请求绕过代理泄露源IP。在httpx中关闭HTTP/2:

session = httpx.Client(
    proxies={"http://": proxy_url, "https://": proxy_url},
    http2=False
)

同时关闭自动重定向,手动处理3xx状态码的跳转,确保重定向请求也走代理:

session = httpx.Client(
    proxies={"http://": proxy_url, "https://": proxy_url},
    follow_redirects=False
)

处理重定向时,直接用同一个会话请求新的跳转地址即可。

3. 清理请求头中的敏感字段

部分请求头可能会泄露源IP或关联信息,比如X-Forwarded-For、X-Real-IP,发送请求前清空或覆盖这些字段:

headers = {
    "X-Forwarded-For": "",
    "X-Real-IP": "",
    # 每次换代理时清空Cookie,使用全新会话
}
response = session.get(target_url, headers=headers)

注意:每次切换代理时必须创建全新的会话,不要复用旧会话的Cookie或自定义头。

4. 切换到SOCKS代理

SOCKS代理比HTTP代理更不容易泄露源IP,httpx使用SOCKS代理需要先安装依赖:

pip install httpx[socks]

然后配置SOCKS5代理:

session = httpx.Client(
    proxies={
        "http://": "socks5://username:password@proxy_host:port",
        "https://": "socks5://username:password@proxy_host:port"
    }
)

5. 调整请求频率与模拟真实请求

如果确认源IP没泄露,可能是请求特征被识别。此时需要:

  • 每次请求添加1-5秒的随机延迟,避免高频请求
  • 使用真实浏览器的User-Agent池,每次请求随机选择一个
  • 补充Accept、Accept-Language等常见浏览器头,让请求更接近真人操作

示例代码:

import time
import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15",
    # 更多真实UA
]

for url in target_url_list:
    headers = {
        "User-Agent": random.choice(user_agents),
        "Accept-Language": "zh-CN,zh;q=0.9"
    }
    response = session.get(url, headers=headers)
    # 处理响应逻辑
    time.sleep(random.uniform(1, 5))

6. 排查请求特征黑名单

如果更换不同代理提供商后立即被封,大概率是目标网站已经把你的请求特征(比如固定UA、请求参数模式)加入黑名单。此时需要:

  • 彻底更换User-Agent池,不要重复使用之前的UA
  • 修改请求的参数顺序、表单字段(如果是POST请求)
  • 考虑用Playwright或Selenium配合代理,模拟真实浏览器的交互行为(比如点击、滚动),进一步降低被识别的概率

内容的提问来源于stack exchange,提问作者DoctorEvil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:53:17