首页 / 用例 / Python requests
如何在 Python requests 中使用代理
把 requests 走代理的所有方式 —— HTTP、HTTPS、SOCKS5、环境变量、会话与轮换 —— 代理全部取自免费、每小时验证的列表。
基础 HTTP / HTTPS 代理
最简单的形式 —— 一个代理同时处理 http 和 https 目标,无需额外的包。
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。