# 使用静态代理的 Python Requests

> 使用静态代理的 Python Requests：经过测试的 HTTP 和 SOCKS5 代码、出口 IP 检查，以及每个账号一个 IP。SteadyProxy IP 起价 US$2.24，无需 KYC，支持加密货币。

- URL: https://steadyproxy.com/zh/guides/python-static-proxy/
- 最后更新: 2026-10-19
- Publisher: SteadyProxy (https://steadyproxy.com)

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

**快速回答 — 如何将 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 代理 URL | http://USERNAME:PASSWORD@host:port, for both the http and https keys |
| SOCKS5 代理 URL | socks5h://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
"""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*

```python
"""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 静态代理指南](https://steadyproxy.com/zh/guides/socks5-static-proxy/)。一个静态 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？](https://steadyproxy.com/zh/guides/how-many-static-ips/)。

## 本指南使用了哪些来源？

1. [Requests 高级用法：proxies、SOCKS、timeouts](https://requests.readthedocs.io/en/latest/user/advanced/) — Requests (2026-10-19)
2. [urllib.parse：quote](https://docs.python.org/3/library/urllib.parse.html) — Python Software Foundation (2026-10-19)
3. [ipify API](https://www.ipify.org/) — ipify (2026-10-19)

---

SteadyProxy: SteadyProxy 是一家静态代理服务商：提供 ISP（静态住宅）和独立数据中心 IP，按 IP 租用 30 天，加密货币支付，无需上传身份证件。
