无需 KYC——无需身份证、无需自拍、无需证件 · 用加密货币支付:BTC, USDT, USDC, ETH, SOL, LTC · 最低充值 US$25
语言: 简体中文
查看价格

指南 · Python

使用静态代理的 Python Requests

用你 IP 的四个值构建代理 URL,为 http 和 https 传入该 URL,设置超时并检查出口 IP。测试日期为 2026 年 10 月 19 日。

最后更新: · 3 分钟阅读

快速回答

如何将 Python Requests 与静态代理一起使用?

要将 Python Requests 与静态代理一起使用,请用你的 IP 的主机、端口、用户名和密码构建代理 URL。将其同时传给 proxies= 的 http 和 https 键,设置超时,并在 api.ipify.org 检查出口 IP。SteadyProxy 截至 2026 年 10 月,静态 IP 30 天的价格为 US$2.24,无需 KYC,支持加密货币支付。

关键信息有哪些?

安装python -m pip install requests(SOCKS5:requests[socks])
HTTP 代理 URLhttp://USERNAME:PASSWORD@host:port, for both the http and https keys
SOCKS5 代理 URLsocks5h://USERNAME:PASSWORD@host:port(默认 SOCKS5 端口 7778)
特殊字符使用 urllib.parse.quote 对用户名和密码进行 URL 编码
环境代理session.trust_env = False 会忽略在别处设置的 HTTP_PROXY
超时(10, 30):10 秒用于连接,30 秒用于读取,在我们的示例中
测试情况Python 3.14 和 Requests 2.34,2026 年 10 月 19 日,通过一个受密码保护的测试代理

如何通过一个静态代理发送请求?

每个静态 IP 在你的仪表盘中都有各自的主机、端口、用户名和密码。请将它们放入环境变量,而不是代码中。下面的脚本会构建代理 URL,向 api.ipify.org 发送一个请求,如果出口 IP 不是你预期的那个就停止。然后它从 ipinfo.io 读取网络名称。如果密码错误,Requests 会抛出 ProxyError,其中提到 407 Proxy Authentication Required,正如我们的测试所示。

python_requests.py:带出口 IP 检查的单个静态代理
"""Python Requests through one static proxy, with a check of the exit IP.

Install: python -m pip install requests
"""
import os
from urllib.parse import quote

import requests

HOST = os.environ.get("PROXY_HOST", "gw.steadyproxy.com")
PORT = os.environ.get("PROXY_PORT", "7777")
USER = quote(os.environ.get("PROXY_USER", "USERNAME"), safe="")
PASSWORD = quote(os.environ.get("PROXY_PASS", "PASSWORD"), safe="")
EXPECTED_IP = os.environ.get("EXPECTED_IP")  # the static IP listed in your dashboard

# The proxy URL starts with http:// even for https:// sites (Requests opens a CONNECT tunnel)
PROXY = "http://" + USER + ":" + PASSWORD + "@" + HOST + ":" + PORT
PROXIES = {"http": PROXY, "https": PROXY}

with requests.Session() as session:
    session.trust_env = False  # ignore HTTP_PROXY / HTTPS_PROXY set elsewhere on the machine
    response = session.get("https://api.ipify.org?format=json", proxies=PROXIES, timeout=(10, 30))
    response.raise_for_status()
    exit_ip = response.json()["ip"]
    print("Exit IP:", exit_ip)
    if EXPECTED_IP and exit_ip != EXPECTED_IP:
        raise SystemExit("Exit IP differs from the static IP you expected")

    page = session.get("https://ipinfo.io/json", proxies=PROXIES, timeout=(10, 30))
    page.raise_for_status()
    print("Network:", page.json().get("org"), "-", page.json().get("country"))

为什么 https:// 站点的代理 URL 是 http://?

proxies 字典的键是目标站点的协议;值是代理的地址。对于 https:// 站点,Requests 要求 HTTP 代理打开一个 CONNECT 隧道,然后通过它向站点运行 TLS。代理永远看不到解密后的页面。因此两个键都指向同一个 http:// 代理 URL。保持证书检查开启:绝不要为了让代理错误消失而设置 verify=False。

如何为每个账户分配各自的静态 IP?

将每个账户或任务映射到一个 IP,并为每个映射构建一个 Session。Session 会保留 cookie 并复用连接,并且在 trust_env = False 的情况下,其 proxies 设置不会被环境变量替换。下面的示例每行读取一个 IP,顺序为 host、port、username、password,你可以从仪表盘中的四个值复制。

python_per_account.py:每个静态 IP 一个 Session
"""One static IP per account or per job with Python Requests.

Each line holds the four values shown for one IP in your dashboard:
host:port:username:password
"""
import os
from urllib.parse import quote

import requests

STATIC_IPS = {
    "store-uk": os.environ.get("PROXY_STORE_UK", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
    "store-de": os.environ.get("PROXY_STORE_DE", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
}


def session_for(name):
    host, port, user, password = STATIC_IPS[name].split(":", 3)
    proxy = "http://" + quote(user, safe="") + ":" + quote(password, safe="") + "@" + host + ":" + port
    session = requests.Session()
    session.trust_env = False
    session.proxies = {"http": proxy, "https": proxy}
    return session


for account in STATIC_IPS:
    with session_for(account) as s:
        ip = s.get("https://api.ipify.org", timeout=(10, 30)).text
        print(account, "->", ip)

如何使用 SOCKS5 而不是 HTTP?

安装 requests[socks],将 http:// 替换为 socks5h://,并将 HTTP 端口替换为 SOCKS5 端口。h 让代理解析主机名,因此 DNS 答案与 IP 所在国家一致。其余代码保持不变。完整、经过测试的示例见 SOCKS5 静态代理指南。一个静态 IP 的两个端口都通向同一个出口 IP。

常见错误是什么意思?

每个错误都指向一个层面。

  • 带 407 的 ProxyError:用户名或密码错误,或此机器不在你的允许列表中。
  • ConnectTimeout:主机或端口错误,或你这一侧的防火墙阻止了到代理端口的出站流量。
  • ReadTimeout:目标或路径缓慢;稍后重试并保留读取超时。
  • SSLError:目标或你机器上的证书问题;不要禁用验证。
  • 来自目标的 403 或 429:站点拒绝或对请求进行了限速;放慢速度。

如果一个 IP 一小时内每个请求都失败,请联系支持。我们的替换规则:如果某个 IP 无法使用,请联系客服:在库存允许的情况下,我们会修复它,或用同一国家/地区的另一个 IP 替换。

关于 Python 和静态代理,人们还问什么?

为什么我要同时设置 http 和 https 键?

Requests 根据目标 URL 的协议选择代理。没有 https 键,对 https:// 站点的请求将直接从你自己的 IP 发出。将两个键都设置为同一个代理 URL,会将每个请求都通过静态 IP 发送。脚本中的 api.ipify.org 检查会立即发现缺失的键。

为什么对用户名和密码进行 URL 编码?

@、: 和 / 等字符在 URL 中有特定含义。否则,包含 @ 的密码会被读取为登录部分的结尾。urllib.parse.quote 配合 safe='' 会对它们进行编码,Requests 在将登录信息发送给代理之前会对其进行解码。这对 HTTP 和 socks5h:// URL 都有效。

为什么将 trust_env 设置为 False?

Requests 默认从环境读取 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY,文档警告环境代理可能会覆盖 Session 的 proxies 设置。VPN 或企业设置可能会将某些请求路由到别处。trust_env = False 使代码仅使用你传入的代理。

我可以在 httpx 或 aiohttp 中使用相同的代码吗?

可以,思路相同:用 host、port、username 和 password 构建代理 URL,再加上超时和出口 IP 检查。参数名称因库和版本而异,因此请遵循该库的代理文档。每个静态 IP 保持一个客户端,就像 Requests 中的 Session 一样。

如何将凭据排除在仓库之外?

从环境变量或密钥管理器读取它们,如示例所做,绝不要提交包含真实值的 .env 文件。不要在日志中打印代理 URL,因为它包含密码。使用 IP 允许列表方法时,允许列表机器上的脚本完全不需要代理密码。

在 Python 中一个静态 IP 可以处理多少请求?

代理按 IP 和 30 天计费,而不是按 GB。按 IP 和每 30 天计费,不按 GB 计费;适用合理使用政策。真正的限制是目标站点,它可能对一个 IP 进行限速。每个 IP 保持适度的并发,添加延迟,并遵循每个站点的条款。对于一个任务需要更多流量,将工作分散到多个 IP;见 我需要多少个静态 IP?。

本指南使用了哪些来源? (3)
  1. Requests 高级用法:proxies、SOCKS、timeouts — Requests (2026-10-19)
  2. urllib.parse:quote — Python Software Foundation (2026-10-19)
  3. ipify API — ipify (2026-10-19)

每个 ISP IP 低至 US$2.24 · 30 天 · 无需 KYC

查看价格