如何在Python请求中使用代理
requests 库通过一个小字典将流量路由通过代理——但您选择的方案决定您的 DNS 和源 IP 是否保持隐藏。这里是实用版本,带有完整可运行的代码。
代理字典及其方案的重要性
Python的requests库通过一个字典与代理进行通信。键不是代理的协议——它们是目标URL的方案。因此,{"http": ..., "https": ...}告诉requests在目标是HTTP或HTTPS站点时使用哪个代理,实际上这两个键指向同一个端点。
What actually changes your privacy is the scheme inside the proxy URL. With socks5:// your own machine resolves DNS first and then connects through the proxy, which can leak the hostnames you visit. With socks5h:// the proxy resolves DNS for you, so the target hostname never leaves your machine in the clear. For an authenticated s4m.online proxy, prefer socks5h to keep DNS remote and better hide your origin IP.
| 代理方案 | DNS由 | 解析端口 | 安装 |
|---|---|---|---|
socks5h:// | 代理(远程) | 1080 | requests[socks] |
socks5:// | 您的机器(本地) | 1080 | requests[socks] |
http:// | 代理 | 3128 | 标准请求 |
SOCKS支持需要PySocks(pip install "requests[socks]");HTTP端点与标准安装一起工作。s4m代理是数据中心的SOCKS5和HTTP,按千兆字节计费——请参见定价。如果您只需要用于快速测试的临时端点,免费的公共代理列表是一个单独的第三方池(使用风险自负)。在完整隧道和代理之间选择?请阅读比较、VPN概述或更多指南。
完整可运行示例
将USER:PASS替换为您的代理凭据。这将检查您的出口IP,重用会话,然后在小池中轮换,带有超时和重试。
import random
import requests
from requests.exceptions import RequestException
# --- Credentials & endpoints (replace with your s4m.online proxy user) ---
USER = "USER"
PASS = "PASS"
HOST = "proxy.s4m.online"
# SOCKS5 with REMOTE DNS (socks5h) — needs: pip install "requests[socks]"
SOCKS5 = f"socks5h://{USER}:{PASS}@{HOST}:1080"
# Plain HTTP CONNECT proxy — works with a stock requests install
HTTP = f"http://{USER}:{PASS}@{HOST}:3128"
def proxies_for(proxy_url):
# The "http"/"https" keys are the scheme of the TARGET url,
# not the proxy's protocol — both can point at one proxy.
return {"http": proxy_url, "https": proxy_url}
def check_ip(session, proxy):
r = session.get(
"https://api.ipify.org?format=json",
proxies=proxies_for(proxy),
timeout=(5, 15), # (connect, read) seconds
)
r.raise_for_status()
return r.json()["ip"]
# --- Per-session config: pools connections, keeps cookies/headers ---
with requests.Session() as s:
s.headers.update({"User-Agent": "s4m-example/1.0"})
print("Exit IP:", check_ip(s, SOCKS5))
# --- Rotate across a list, retrying on failure ---
POOL = [SOCKS5, HTTP]
def fetch(url, retries=3):
last_err = None
for attempt in range(1, retries + 1):
proxy = random.choice(POOL)
try:
with requests.Session() as s:
r = s.get(url, proxies=proxies_for(proxy), timeout=(5, 15))
r.raise_for_status()
return r
except RequestException as e:
last_err = e
print(f"[{attempt}/{retries}] {proxy} failed: {e}")
raise last_err
resp = fetch("https://httpbin.org/ip")
print(resp.json())按请求、按会话或全局
按请求计费
将 proxies= 传递给每个调用:requests.get(url, proxies=proxies_for(SOCKS5), timeout=10)。这是最明确的形式,也是最容易在每次调用时交换或轮换的方式。
每会话
使用session.proxies = proxies_for(SOCKS5)设置一次。通过该会话发出的每个请求都继承代理并重用TCP连接,这比每次都新建get()要快。
通过环境全局设置
requests尊重HTTP_PROXY、HTTPS_PROXY和ALL_PROXY。导出ALL_PROXY=socks5h://USER:PASS@proxy.s4m.online:1080,所有请求都将路由而无需代码更改。使用NO_PROXY排除主机,或在Session上使用trust_env=False以忽略环境。
让人困惑的事情
身份验证在URL中
直接在代理 URL 中放置 USER:PASS@,请求会为您发送凭据。如果您的密码包含 @、: 或 / 字符,请先使用 urllib.parse.quote 进行 URL 编码。
保持DNS远程
socks5在您的机器上解析主机名;socks5h在代理处解析它们。当目标是保持您的查找和源IP不被目标雷达捕捉时,请使用socks5h。
重用会话
requests.Session会池化连接并持久化cookie,因此通过一个代理的请求突发明显比每次冷调用requests.get()快。
保持 TLS 验证开启
代理仅转发你的流量——这不是设置verify=False的理由。保持证书验证启用,以便中介无法静默篡改HTTPS响应。
问题,已解答
SOCKS5 代理需要额外的包吗?
是的。requests 需要 PySocks 来支持 SOCKS:使用 pip install "requests[socks]" 安装。端口 3128 上的 HTTP 端点与标准 requests 安装和没有额外依赖项一起工作。
socks5 和 socks5h 之间有什么区别?
这与DNS解析的位置有关。socks5://在连接之前在您自己的机器上解析目标主机名;socks5h://则要求代理进行解析。使用socks5h以避免泄露您访问的主机名。
为什么我旋转时出口 IP 不变?
通常代理字典实际上并没有被应用,或者单个会话正在重用一个上游连接。确认每个请求通过proxies=,在轮换时为每个代理构建一个新的会话,并从IP回显端点打印响应以进行验证。
这些是住宅 IP 吗?
不。s4m 代理是数据中心 SOCKS5 和 HTTP 端点,使用用户名和密码进行身份验证,并按每千兆计量。单独的免费公共代理列表是第三方的,未经验证,不适合生产使用。
我如何跳过列表中的死代理?
将每次尝试包装在 try/except requests.exceptions.RequestException 中,然后使用池中的下一个代理重试。上面的可运行示例正是这样做的,带有一个小的重试循环。
人们通过搜索找到此页面
- 如何在Python请求中使用代理
- 如何在Python请求中使用代理 教程
- 如何在 VPS 上构建自己的代理服务器(3proxy / dante)
- 如何在Python请求中使用代理是安全的吗
- 使用 HTTP_PROXY / HTTPS_PROXY 环境变量
- 代理设置逐步进行
- 免费代理列表设置
- http 代理提供商
- 带身份验证的 Puppeteer 代理设置
- 代理认证
- 最佳 openvpn 2026
- VPN 断开开关 解释
此页面回答的真实搜索短语 — 链接的短语打开详细覆盖它们的页面。