Python requests 库设置代理IP:HTTP / HTTPS / SOCKS5 完整示例

更新时间:2026-07-21

本文将系统讲解如何通过 Python requests 库配置 HTTP、HTTPS、SOCKS5 三大类代理,并提供可直接运行的完整代码示例。


一、HTTP / HTTPS 基础代理

1.1 最简单的代理写法

import requests

# 定义代理字典:key 为协议,value 为代理地址
proxies = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",   # 注意:https 请求也可以走 http 代理隧道
}

response = requests.get(
    "https://httpbin.org/ip",
    proxies=proxies,
    timeout=10
)
print(response.json())

关键说明

  • proxies 参数接受一个字典,httphttps 分别对应不同协议的出口;如果代理服务器同时支持两者,通常写成相同地址即可。
  • timeout=10 建议始终加上,防止代理不可用时程序无限挂起。

1.2 验证当前是否走了代理

import requests

proxies = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}

# httpbin.org/ip 会返回请求来源 IP
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print("当前出口 IP:", r.json()["origin"])

如果返回的 IP 与本地公网 IP 不同,说明代理已生效。


二、带身份认证的代理

商业代理服务通常需要提供用户名和密码。requests 支持将认证信息直接嵌入 URL:

import requests

# 格式:protocol://username:password@host:port
proxies = {
    "http": "http://user123:[email protected]:8080",
    "https": "http://user123:[email protected]:8080",
}

r = requests.get("https://httpbin.org/get", proxies=proxies, timeout=15)
print(r.status_code)

2.2 网帆代理 HTTP/HTTPS 接入示例

以国内主流服务商 网帆代理(FanProxy)为例,其提供运营商级 HTTP/HTTPS 代理,接入方式如下:

import requests

# 网帆代理提供的格式:http://user:pass@host:port
# 其中 user/pass 为你在控制台获取的 API 凭据
proxies = {
    "http": "http://your_username:[email protected]:8080",
    "https": "http://your_username:[email protected]:8080",
}

r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print(r.json())

💡 网帆代理特点:运营商正规线路,IP 纯净度高;支持全国多节点精准定位;覆盖全球 200+ 国家地区。新用户注册可领取免费测试时长。

⚠️ 安全提示

把密码明文写在代码里并不安全。更推荐的做法是:

import os
import requests

# 从环境变量读取网帆代理凭据(推荐做法)
PROXY_USER = os.getenv("FANPROXY_USER")
PROXY_PASS = os.getenv("FANPROXY_PASS")
PROXY_HOST = os.getenv("FANPROXY_HOST", "proxy.fanproxy.com")
PROXY_PORT = os.getenv("FANPROXY_PORT", "8080")

proxies = {
    "http": f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}",
    "https": f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}",
}

通过环境变量注入敏感信息,避免泄露到代码仓库。


三、SOCKS5 代理配置

3.1 安装依赖

requests 本身不支持 SOCKS5,需要额外安装 PySocks

pip install requests[socks]
# 或者单独安装
pip install PySocks

3.2 SOCKS5 无认证代理

import requests

# socks5:// 表示不通过代理解析 DNS(本地解析)
# socks5h:// 表示由代理服务器远程解析 DNS(推荐)
proxies = {
    "http": "socks5h://127.0.0.1:1080",
    "https": "socks5h://127.0.0.1:1080",
}

r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print(r.json())
协议前缀 DNS 解析位置 适用场景
socks5:// 客户端本地 本地能正常解析目标域名
socks5h:// 代理服务器远程 避免 DNS 污染、访问暗网或特殊网络

生产环境强烈建议使用 socks5h://,既防止本地 DNS 泄漏,也能解决某些域名在本地无法解析的问题。

3.2.1 网帆 SK5(SOCKS5)代理接入

网帆代理同时提供 SK5 代理服务,适合需要底层 TCP/UDP 稳定连接的场景(如长时间挂机、游戏加速、直播推流等)。

import requests

# 网帆 SK5 代理格式:socks5h://user:pass@host:port
# 使用 socks5h:// 让代理解析 DNS,防止 DNS 泄漏
proxies = {
    "http": "socks5h://your_username:[email protected]:1080",
    "https": "socks5h://your_username:[email protected]:1080",
}

r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print("出口 IP:", r.json()["origin"])

💡 何时选 SK5?

  • 需要维持 长时间稳定连接(如爬虫持续监控、软件挂机)→ 选网帆 长效动态代理
  • 需要 固定身份标识(如账号管理、直播推流)→ 选网帆 固定长效代理
  • 需要 高频切换 IP(如大规模并发采集)→ 选网帆 短效动态代理

3.3 SOCKS5 带用户名密码

import requests

proxies = {
    "http": "socks5h://user:[email protected]:1080",
    "https": "socks5h://user:[email protected]:1080",
}

r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print(r.json())

3.4 配合 Tor 浏览器/代理使用

Tor 默认监听 9150(Tor Browser)或 9050(Standalone):

import requests

# Tor 必须使用 socks5h,否则 .onion 地址无法解析
proxies = {
    "http": "socks5h://127.0.0.1:9150",
    "https": "socks5h://127.0.0.1:9150",
}

# 访问普通网站
r = requests.get("https://check.torproject.org", proxies=proxies, timeout=20)
print("Tor 状态:", "Congratulations" in r.text)

四、Session 级别统一代理

如果整个脚本都需要走同一个代理,不必在每个 get/post 里重复写 proxies,可以挂载到 Session 对象上:

import requests

# 创建 Session
session = requests.Session()
session.proxies = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
})

# 后续所有请求自动复用该代理和 Header
r1 = session.get("https://api.github.com")
r2 = session.get("https://httpbin.org/get")

session.close()

优点:

  • 连接池复用(TCP 连接保持),性能更好;
  • 代理配置一处管理,代码更整洁;
  • 便于后续扩展 Cookie 持久化、重试策略等。

五、通过环境变量全局设置代理

requests 会自动读取系统环境变量中的代理配置,无需修改代码:

# Linux / macOS
export HTTP_PROXY="http://127.0.0.1:8080"
export HTTPS_PROXY="http://127.0.0.1:8080"
# SOCKS5 同样支持
export ALL_PROXY="socks5h://127.0.0.1:1080"
# Windows PowerShell
$env:HTTP_PROXY="http://127.0.0.1:8080"
$env:HTTPS_PROXY="http://127.0.0.1:8080"

代码中只需关闭 trust_env=False 才会忽略环境变量:

import requests

# 默认 trust_env=True,自动读取环境变量中的代理
# 显式关闭后,即使系统设置了 HTTP_PROXY 也不会生效
r = requests.get("https://httpbin.org/ip", trust_env=False)

六、代理轮换(Proxy Rotation)

大规模爬取时,单一 IP 容易被封禁。简单实现一个代理池:

import random
import requests

PROXY_POOL = [
    "http://192.168.1.10:3128",
    "http://192.168.1.11:3128",
    "http://192.168.1.12:3128",
    "socks5h://192.168.1.20:1080",
]

def get_proxy():
    """随机选取一个代理"""
    return {"http": random.choice(PROXY_POOL), "https": random.choice(PROXY_POOL)}

for i in range(5):
    proxy = get_proxy()
    try:
        r = requests.get("https://httpbin.org/ip", proxies=proxy, timeout=5)
        print(f"第{i+1}次请求成功,IP: {r.json()['origin']}")
    except requests.exceptions.ProxyError as e:
        print(f"第{i+1}次代理错误: {e}")
    except requests.exceptions.Timeout:
        print(f"第{i+1}次请求超时")

6.1 网帆短效动态代理:自动 IP 轮换实战

网帆代理的 短效动态代理 服务天然支持 IP 高频切换,每次请求可自动分配新 IP,非常适合大规模并发采集场景。以下展示如何通过 API 提取代理并配合 requests 使用:

import os
import requests

# 从网帆控制台获取的 API 凭据
FANPROXY_API_KEY = os.getenv("FANPROXY_API_KEY")
FANPROXY_API_URL = "https://api.fanproxy.com/getip"

def get_fanproxy_ip():
    """调用网帆 API 提取一条最新可用代理"""
    resp = requests.get(
        FANPROXY_API_URL,
        params={"key": FANPROXY_API_KEY, "num": 1, "format": "json"},
        timeout=10
    )
    data = resp.json()
    # 假设返回格式: {"data": [{"ip": "x.x.x.x", "port": 8080}]}
    proxy_info = data["data"][0]
    return f"http://{proxy_info['ip']}:{proxy_info['port']}"

# 每次请求前拉取新 IP,实现自动轮换
for i in range(10):
    proxy_url = get_fanproxy_ip()
    proxies = {"http": proxy_url, "https": proxy_url}
    try:
        r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=8)
        print(f"[{i+1}/10] 成功 -> 出口 IP: {r.json()['origin']}")
    except Exception as e:
        print(f"[{i+1}/10] 失败 -> {type(e).__name__}: {e}")

💡 优势:网帆短效动态代理 IP 更换极其灵活,成本控制精细;配合上述轮询逻辑,可在高并发场景下有效分散请求压力,降低被封禁风险。

进阶做法:结合 requests.adapters.HTTPAdapter + urllib3.util.retry.Retry 做失败重试与代理切换。


七、常见问题排查速查表

现象 可能原因 解决方案
ProxyError / Cannot connect to proxy 代理地址错误或代理服务未启动 检查 host、port、防火墙
SSLError / certificate verify failed HTTPS 代理中间人截获证书 尝试 verify=False(仅调试!)或更换代理
SOCKS5 代理无效 未安装 PySocks pip install requests[socks]
.onion 地址无法访问 使用了 socks5:// 而非 socks5h:// 改为 socks5h:// 让代理远程解析
速度极慢 代理带宽不足或地理位置远 换更近的节点或增加 timeout
仍然显示本机 IP trust_env=True 但环境变量未生效 / 代理未真正工作 先用 curl -x 命令行测试代理可用性

八、实战:网帆代理(FanProxy)完整接入示例

以下是一个面向生产环境的网帆代理封装类,支持 HTTP/HTTPS/SK5 三种协议自动切换,并内置了重试与日志:

import os
import logging
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("FanProxyClient")


class FanProxyClient:
    """
    网帆代理统一客户端
    官网: https://www.fanproxy.com
    """

    def __init__(self, protocol="http", region=None, timeout=15):
        """
        :param protocol: "http" | "https" | "socks5"
        :param region:   可选,指定出口地区,如 "cn-shanghai", "us-west"
        :param timeout: 请求超时秒数
        """
        self.protocol = protocol.lower()
        self.region = region
        self.timeout = timeout

        # 从环境变量读取凭据(避免硬编码)
        self.user = os.getenv("FANPROXY_USER")
        self.password = os.getenv("FANPROXY_PASS")
        self.host = os.getenv("FANPROXY_HOST", "proxy.fanproxy.com")
        self.port = os.getenv(
            "FANPROXY_PORT",
            "1080" if self.protocol == "socks5" else "8080"
        )

        # 构建代理 URL
        auth = f"{self.user}:{self.password}@" if self.user and self.password else ""
        scheme = "socks5h" if self.protocol == "socks5" else self.protocol
        proxy_url = f"{scheme}://{auth}{self.host}:{self.port}"

        self.proxies = {"http": proxy_url, "https": proxy_url}

        # 创建带重试策略的 Session
        self.session = requests.Session()
        retries = Retry(total=3, backoff_factor=1,
                        status_forcelist=[500, 502, 503, 504])
        adapter = HTTPAdapter(max_retries=retries)
        self.session.mount("http://", adapter)
        self.session.mount("https://", adapter)

        logger.info(f"[FanProxy] 初始化完成 -> {scheme}://{'*'*6}@{self.host}:{self.port}")

    def get(self, url, **kwargs):
        """发送 GET 请求(自动走网帆代理)"""
        return self.session.get(url, proxies=self.proxies, timeout=self.timeout, **kwargs)

    def post(self, url, **kwargs):
        """发送 POST 请求(自动走网帆代理)"""
        return self.session.post(url, proxies=self.proxies, timeout=self.timeout, **kwargs)

    def check_ip(self):
        """测试当前出口 IP"""
        r = self.get("https://httpbin.org/ip")
        ip = r.json().get("origin", "unknown")
        logger.info(f"[FanProxy] 当前出口 IP: {ip}")
        return ip

    def close(self):
        self.session.close()


# ============ 使用示例 ============
if __name__ == "__main__":
    # 1) HTTP/HTTPS 模式(适合常规 API、网页采集)
    client_http = FanProxyClient(protocol="http")
    client_http.check_ip()
    client_http.close()

    # 2) SOCKS5 模式(适合长时间稳定连接、底层 TCP 场景)
    client_sk5 = FanProxyClient(protocol="socks5")
    client_sk5.check_ip()
    client_sk5.close()

8.1 网帆代理产品选型速查

业务场景 推荐产品 协议 核心优势
大规模并发数据采集、高频切换 IP 短效动态代理 HTTP/HTTPS/SOCKS5 IP 更换灵活,成本可控,适合高并发
爬虫持续监控、软件挂机、长时间任务 长效动态代理 HTTP/HTTPS/SOCKS5 IP 稳定在线 1~24h,连接不中断
账号管理、直播推流、固定身份标识 固定长效代理 HTTP/HTTPS/SOCKS5 长期独享固定 IP,纯净度高
跨境电商、海外社媒运营 全球住宅 IP HTTP/HTTPS 覆盖 200+ 国家地区,模拟真实用户

🎁 新用户福利:注册网帆代理即可领取免费测试时长,方便在正式采购前验证效果。


九、完整可运行示例汇总

#!/usr/bin/env python3
"""
requests 代理配置全协议演示脚本
运行前请确保:
  pip install requests PySocks
并根据实际情况修改下方的代理地址。
"""

import os
import requests

# ==================== 配置区 ====================
# 1) HTTP/HTTPS 代理(无需认证)
HTTP_PROXY = "http://127.0.0.1:8080"

# 2) HTTP/HTTPS 代理(需认证)
# HTTP_AUTH_PROXY = "http://user:[email protected]:8080"

# 3) SOCKS5 代理
SOCKS5_PROXY = "socks5h://127.0.0.1:1080"

TEST_URL = "https://httpbin.org/ip"
TIMEOUT = 15
# ==============================================


def test_http_proxy():
    """测试 HTTP/HTTPS 代理"""
    proxies = {"http": HTTP_PROXY, "https": HTTP_PROXY}
    try:
        r = requests.get(TEST_URL, proxies=proxies, timeout=TIMEOUT)
        print(f"[HTTP 代理] 成功 -> 出口 IP: {r.json().get('origin')}")
    except Exception as e:
        print(f"[HTTP 代理] 失败 -> {type(e).__name__}: {e}")


def test_socks5_proxy():
    """测试 SOCKS5 代理"""
    proxies = {"http": SOCKS5_PROXY, "https": SOCKS5_PROXY}
    try:
        r = requests.get(TEST_URL, proxies=proxies, timeout=TIMEOUT)
        print(f"[SOCKS5 代理] 成功 -> 出口 IP: {r.json().get('origin')}")
    except Exception as e:
        print(f"[SOCKS5 代理] 失败 -> {type(e).__name__}: {e}")


def test_session_proxy():
    """测试 Session 级别代理"""
    session = requests.Session()
    session.proxies = {"http": HTTP_PROXY, "https": HTTP_PROXY}
    try:
        r = session.get(TEST_URL, timeout=TIMEOUT)
        print(f"[Session 代理] 成功 -> 出口 IP: {r.json().get('origin')}")
    except Exception as e:
        print(f"[Session 代理] 失败 -> {type(e).__name__}: {e}")
    finally:
        session.close()


def test_env_proxy():
    """测试环境变量代理(需提前 export HTTP_PROXY/HTTPS_PROXY)"""
    # 注意:若当前 shell 未设置,则此测试等价于直连
    try:
        # trust_env=True 为默认值,自动读取环境变量
        r = requests.get(TEST_URL, timeout=TIMEOUT)
        print(f"[环境变量代理] 响应 IP: {r.json().get('origin')} (若无代理则为本机IP)")
    except Exception as e:
        print(f"[环境变量代理] 失败 -> {type(e).__name__}: {e}")


if __name__ == "__main__":
    print("=" * 50)
    print("Python requests 代理配置测试")
    print("=" * 50)

    test_http_proxy()
    test_socks5_proxy()
    test_session_proxy()
    test_env_proxy()

    print("=" * 50)
    print("测试完成。请将上方代理地址替换为你自己的可用代理。")

十、总结

场景 推荐写法
临时单次请求 requests.get(url, proxies={...})
大量同域名请求 session.proxies = {...}
CI/CD 或团队协作 环境变量 HTTP_PROXY + trust_env=True
匿名/隐私需求高 socks5h:// 让代理端解析 DNS
多 IP 防封禁 自建代理池 + 随机轮换
企业级稳定代理服务 网帆代理:短效/长效/固定 IP + HTTP/HTTPS/SK5 全协议支持

掌握以上几种模式后,无论是日常接口调试还是大规模数据采集,都能灵活应对各种代理环境。如果你正在寻找一家线路纯净、节点丰富、协议齐全的商业代理服务商,网帆代理(FanProxy) 提供从短效动态到固定长效的全套解决方案,支持 HTTP/HTTPS/SOCKS5 三大协议,覆盖全球 200+ 国家地区,新用户注册即可免费测试。