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

Python Requests使用代理后IP未变更问题排查求助

代理轮换后仍暴露真实IP:问题排查与解决方案

一、代码的核心错误

你请求的是HTTPS协议的IP追踪接口,但仅配置了HTTP类型的代理——requests库不会自动将HTTP代理复用给HTTPS请求,这直接导致所有HTTPS请求都绕过了代理,使用你的真实IP发起连接。另外代码遗漏了time模块的导入,运行时会触发报错。

修正后的完整代码:

import requests
import time  # 补上缺失的模块导入

headers = {
    "User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
}

# 同时配置HTTP和HTTPS代理项
proxi = {"http": "", "https": ""}

prox_ping_ready = ["173.219.112.85:8080",
"43.132.148.107:2080",
"216.176.187.99:8886",
"193.108.21.234:1234",
"151.80.120.192:3128",
"139.255.10.234:8080",
"120.24.33.141:8000",
"12.88.29.66:9080",
"47.241.66.249:1081",
"51.79.205.165:8080",
"63.250.53.181:3128",
"160.3.168.70:8080"]


ipTracker = ["wtfismyip.com/text", "api.ip.sb/ip", "ipecho.net/plain", "ifconfig.co/ip"]

for element in prox_ping_ready:
    proxy_addr = f"http://{element}"
    proxi["http"] = proxy_addr
    proxi["https"] = proxy_addr  # 为HTTPS请求配置对应代理
    for choice in ipTracker:
        try:
            # 去除返回结果中的换行符,优化输出格式
            current_ip = requests.get(f'https://{choice}', proxies=proxi, timeout=1, headers=headers).text.strip()
            print(f'代理[{element}] | 检测站点[{choice}] | 出口IP: {current_ip}')
        except Exception as e:
            print(f'代理[{element}] 访问{choice}失败: {str(e)}')
    time.sleep(3)

二、免费代理的真实现状

你遇到的情况确实存在:多数免费代理标注的“elite/anonymous”匿名性形同虚设:

  • 大量免费代理实际是透明代理,会在请求头中透传你的真实IP(比如X-Forwarded-For字段);
  • 免费代理稳定性极差,多数代理在你获取时已经失效,或者使用几次后就被目标站点封禁;
  • 部分代理服务商为了凑数,会将无效或低质量的代理错误标记为高匿名,实际无法隐藏真实IP。

三、检测代理匿名性的方法

你可以通过以下步骤检测代理的匿名等级:

  1. 对比出口IP:先获取自己的真实IP,再通过代理请求IP检测站点,若返回的IP与真实IP不一致,说明代理至少能隐藏出口IP;
  2. 检查请求头透传:使用能返回完整请求头的接口,查看是否存在X-Forwarded-For、X-Real-IP、Via这类字段:
    • 若不存在这些字段,且出口IP为代理IP → 高匿名代理(elite);
    • 若存在这些字段,但字段值不包含你的真实IP → 匿名代理(anonymous);
    • 若字段值包含你的真实IP → 透明代理,无法隐藏真实IP;
  3. 封装检测逻辑的示例代码:
def check_proxy_anonymity(proxy):
    # 先获取本地真实IP
    real_ip = requests.get("https://wtfismyip.com/text", headers=headers).text.strip()
    # 配置代理
    proxies = {"http": f"http://{proxy}", "https": f"http://{proxy}"}
    try:
        # 请求返回完整请求信息的接口(可自行搭建或使用合规的检测接口)
        resp = requests.get("https://xxx/get", proxies=proxies, headers=headers, timeout=3)
        resp_data = resp.json()
        proxy_out_ip = resp_data.get("origin", "").split(",")[0].strip()
        request_headers = resp_data.get("headers", {})
        
        if proxy_out_ip != real_ip:
            if "X-Forwarded-For" not in request_headers:
                return f"代理[{proxy}] | 高匿名(elite)"
            elif real_ip not in request_headers.get("X-Forwarded-For", ""):
                return f"代理[{proxy}] | 匿名(anonymous)"
            else:
                return f"代理[{proxy}] | 透明(transparent,透传真实IP)"
        else:
            return f"代理[{proxy}] | 无效(直接使用真实IP)"
    except Exception as e:
        return f"代理[{proxy}] | 失效: {str(e)}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:05:16