发布时间: 2026年8月11日更新时间: 2026年8月11日

Python requests 设置 HTTP 和 SOCKS5 代理:参数、认证和排错

这篇文章演示 Python requests 如何设置 HTTP 和 SOCKS5 代理,包括账号认证、socks5h 写法、出口验证和常见报错处理,适合需要把代理 IP 接进程序并先完成最小可用测试的开发者。

Python requests 设置代理时,先确认代理参数和协议写法,再去判断代理 IP 类型。HTTP、HTTPS、SOCKS5 是接入协议;动态住宅代理 IP、静态住宅代理 IP、数据中心代理 IP 才是出口资源类型,二者不要混在一起判断。

接入前先把协议和资源分开

requests 里最常见的问题不是“代理 IP 不好”,而是协议、账号密码、端口、超时时间或 SOCKS5 依赖写错。先用示例请求确认代理出口,再迁移到业务请求,排错时就能分清是 requests 写法问题还是目标站规则问题。

准备代理参数

接入前先从后台拿到同一组代理信息:协议、主机、端口、账号、密码。不要把官网登录密码当成代理密码,也不要把 HTTP 端口填到 SOCKS5 入口里。

如果使用账号密码认证,代理 URL 通常长这样:

```python
username = "proxy_user"
password = "proxy_pass"
host = "proxy.example.com"
port = "12345"
proxy_http = f"http://{username}:{password}@{host}:{port}"
```

如果账号或密码里含有 @:/ 等特殊字符,先用 urllib.parse.quote() 做 URL 编码再拼接:

```python
from urllib.parse import quote

username = quote("proxy_user", safe="")
password = quote("pa:ss@word/1", safe="")
proxy_http = f"http://{username}:{password}@{host}:{port}"
```

HTTP 和 HTTPS 代理写法

用 requests 验证 HTTP 代理是否生效

```python
import requests

proxies = {
"http": "http://proxy_user:proxy_pass@proxy.example.com:12345",
"https": "http://proxy_user:proxy_pass@proxy.example.com:12345",
}

resp = requests.get(
"https://api.ipify.org?format=json",
proxies=proxies,
timeout=(10, 30),
)
print(resp.status_code, resp.text)
```

HTTPS 键怎么理解

这里的 "https" 键表示请求 HTTPS 网站也走代理,不代表代理 URL 必须写成 https://。多数 HTTP 代理接入 HTTPS 目标站时,代理地址仍写 http://主机:端口

SOCKS5 代理写法

requests 使用 SOCKS5 前要安装什么

requests 使用 SOCKS5 需要安装 socks 支持,例如 pip install "requests[socks]"

socks5h 适用场景

socks5 由本地解析域名后再把 IP 交给代理;socks5h 把域名原样交给代理,由代理端解析。担心 DNS 泄漏或域名只能在代理网络解析时,用 socks5h

```python
import requests

proxies = {
"http": "socks5h://proxy_user:proxy_pass@proxy.example.com:12345",
"https": "socks5h://proxy_user:proxy_pass@proxy.example.com:12345",
}

resp = requests.get(
"https://api.ipify.org?format=json",
proxies=proxies,
timeout=(10, 30),
)
print(resp.text)
```

如果遇到 DNS 仍像本地网络,要优先检查这里。

验证和排错

现象优先检查处理方向
407账号、密码、白名单、端口修认证,不要先换代理 IP
timeout本地网络、代理主机、目标站响应、超时设置区分连接超时和读取超时
HTTPS/TLS 连接错误HTTPS 写法、系统时间、目标站 TLS 规则不建议跳过安全校验
403/429目标站规则、请求频率、账号、Cookie先降频并记录状态码
出口地区不一致IP 数据库、目标站识别、DNS、地区参数多检测站交叉验证

建议把测试拆成两步:先请求 IP 检测页确认出口,再请求目标 URL。两步混在一起时,很容易把目标站规则误判成代理参数错误。正式运行时还要记录状态码、耗时、代理 IP、目标 URL 和异常文本,方便回溯。

代理 IP 类型怎么选

公开页面采样、多地区观察和短会话测试,可以先评估 动态住宅代理 IP

长期账号、固定地区和持续会话,更适合评估 静态住宅代理 IP

如果目标站对住宅属性要求不高,再测试 数据中心代理 IP

常见问题

requests 里 HTTP 和 HTTPS 都要填吗?

建议都填。否则访问 HTTPS 目标站时可能没有走代理。

socks5h 和 socks5 有什么区别?

socks5 由本地解析域名后再把 IP 交给代理;socks5h 把域名原样交给代理,由代理端解析。担心 DNS 泄漏或域名只能在代理网络解析时,用 socks5h

407 报错要不要换代理 IP?

通常不用。先查代理账号、密码、白名单、端口和认证 URL 写法。

IP 检测页正常,目标站 403 怎么办?

说明代理连接大概率正常,下一步查目标站规则、账号状态、请求头、Cookie 和频率。