ProxyHealthList

首页 / 用例 / Python requests

如何在 Python requests 中使用代理

requests 走代理的所有方式 —— HTTP、HTTPS、SOCKS5、环境变量、会话与轮换 —— 代理全部取自免费、每小时验证的列表。

HTTP 列表(TXT) SOCKS5 列表(TXT)

基础 HTTP / HTTPS 代理

最简单的形式 —— 一个代理同时处理 httphttps 目标,无需额外的包。

import requests

proxy = "http://1.2.3.4:8080"   # HTTP 列表中的一行
r = requests.get(
    "https://httpbin.org/ip",
    proxies={"http": proxy, "https": proxy},
    timeout=10,
)
print(r.json())

SOCKS5 代理

先装一次 SOCKS 支持,然后用 socks5h:// 方案让 DNS 通过代理解析。

pip install "requests[socks]"
proxy = "socks5h://1.2.3.4:1080"   # SOCKS5 列表中的一行
r = requests.get("https://httpbin.org/ip",
                 proxies={"http": proxy, "https": proxy}, timeout=10)

为整个会话设置代理

s = requests.Session()
s.proxies = {"http": "http://1.2.3.4:8080", "https": "http://1.2.3.4:8080"}
s.get("https://example.com")   # 该会话的每个请求都走代理

环境变量

requests 也识别标准代理环境变量,无需改代码即可设代理:

export HTTP_PROXY="http://1.2.3.4:8080"
export HTTPS_PROXY="http://1.2.3.4:8080"
python your_script.py

从列表自动挑一个可用代理

import requests

txt = requests.get(
    "https://raw.githubusercontent.com/xyzs996/free-proxy-health-list/main/proxies/protocols/http/data.txt",
    timeout=15).text
for line in txt.splitlines():
    proxy = f"http://{line.strip()}"
    try:
        r = requests.get("https://httpbin.org/ip",
                         proxies={"http": proxy, "https": proxy}, timeout=6)
        if r.ok:
            print("using", proxy, r.json()); break
    except requests.RequestException:
        continue

常见问题

为什么我的代理请求超时?

免费代理不稳定——任一条都可能几分钟内失效。务必设置较短 timeout 并在失败时循环取下一条。列表每小时重新验证并按速度排序。

用 http:// 还是 socks5h://?

HTTP 代理用 http://,SOCKS5 用 socks5h://。结尾的 h 让 DNS 远程解析,避免 DNS 泄露,也更适合受限网络。

能配合 httpx 或 aiohttp 用吗?

可以 —— 同样的 host:port 条目通用。httpx 和 aiohttp 接受同样形式的 http:// / socks5:// 代理 URL。

相关