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

Python使用requests配置session代理后请求返回IP与直连一致问题排查

问题原因
  • 代理规则与请求协议不匹配:你仅给session.proxies配置了https协议对应的代理地址,但发起的session请求是http://httpbin.org/ip,属于HTTP协议,不会匹配到你配置的HTTPS代理,因此直接走本机网络直连,没有走代理。
  • 代理地址存在格式错误:readlines()方法读取文件每一行内容时,会保留行末尾的\n换行符,你拼接后的代理地址实际为https://[代理地址]\n,属于无效地址,就算后续配置了HTTP代理也会因为地址格式错误无法连接。
  • 异常被屏蔽无法感知错误:你使用了无具体类型的except语句,代理配置错误、代理不可用这类异常都会被直接吞掉,你无法感知到代理其实根本没有生效。
  • 直接调用requests.get()默认就是走本机直连,本身就不会继承你给session单独配置的代理,哪怕session的代理配置正确,这行返回的也永远是你本机的出口IP。
修正代码
import requests

# 读取代理并自动去除换行符、空白行
with open("pro.txt", "r", encoding="utf-8") as f:
    proxy_list = [line.strip() for line in f if line.strip()]

for proxy in proxy_list:
    try:
        def get_session(proxy_addr):
            session = requests.session()
            # 同时配置HTTP和HTTPS协议的代理
            session.proxies = {
                "http": f"http://{proxy_addr}",
                "https": f"https://{proxy_addr}"
            }
            return session
        
        session = get_session(proxy)
        # 添加超时避免长时间挂起
        resp1 = session.get("http://httpbin.org/ip", timeout=10)
        print("session代理请求IP:", resp1.text)
        
        resp2 = requests.get("http://httpbin.org/ip", timeout=10)
        print("直连请求IP:", resp2.text)
    except Exception as e:
        print(f"代理{proxy}连接失败:{str(e)}")
        continue

修正后只要代理可用,第一个session请求返回的就是代理IP,第二个直连请求返回本机IP,两者会存在差异,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:18:04