SOCKS5 和 HTTP 代理有什么区别?原理、DNS、UDP 与配置示例
HTTP(S) 代理和 SOCKS5 代理的工作原理、认证方式、UDP 与 DNS 解析差异,指纹浏览器和爬虫分别该选哪个,附 curl 与 Python requests 配置示例和常见报错排查。
买代理时,后台通常会让你选协议:HTTP、HTTPS 还是 SOCKS5。很多人随便选一个,能用就行,直到遇到 DNS 泄露、认证失败或者某个软件死活连不上。
这篇文章讲清两种协议的区别,以及在指纹浏览器、爬虫里该怎么选、怎么配。
一句话结论
- 浏览网页、跑普通爬虫:HTTP 和 SOCKS5 都能用,选服务商默认推荐的即可。
- 需要代理非网页流量(如 UDP):只能用 SOCKS5,而且要服务商明确支持 UDP。
- 在意 DNS 是否走代理:SOCKS5 要用
socks5h(让代理端解析域名);HTTP 代理访问 HTTPS 网站时,域名本身就交给代理去解析。
HTTP(S) 代理怎么工作
HTTP 代理"懂"HTTP 协议:
- 访问 http:// 网站时,客户端把完整请求发给代理,代理代为请求后返回结果;
- 访问 https:// 网站时,客户端先发一个
CONNECT 目标域名:443请求,代理建立一条到目标的隧道,之后的 TLS 加密流量原样转发,代理看不到内容。
所谓"HTTPS 代理",在多数服务商那里指的是支持 CONNECT 隧道、能访问 HTTPS 网站的 HTTP 代理,而不是客户端与代理之间也用 TLS 加密。真正"客户端到代理也加密"的代理比较少见,配置时要看清服务商文档。
认证:通常是用户名密码(放在 Proxy-Authorization 头里),或者在后台绑定你的出口 IP 白名单。
SOCKS5 代理怎么工作
SOCKS5 工作在更底层,不关心你传的是什么协议。根据 RFC 1928:
- 支持三种命令:CONNECT(建立 TCP 连接)、BIND(接受入站连接)和 UDP ASSOCIATE(转发 UDP);
- 目标地址可以是 IPv4、IPv6 或域名;
- 认证方式包括无认证、GSSAPI 和用户名 / 密码。
因为不解析内容,SOCKS5 可以代理 HTTP 之外的流量,比如邮件、游戏、部分即时通讯协议。
关键差异对比
| HTTP(S) 代理 | SOCKS5 代理 | |
|---|---|---|
| 工作层级 | 应用层,理解 HTTP | 会话层,不关心上层协议 |
| 支持的流量 | HTTP / HTTPS 网页 | 任意 TCP;规范支持 UDP |
| UDP | 不支持 | 规范支持,但取决于服务商 |
| DNS 解析 | HTTPS 走 CONNECT 时由代理解析 | 取决于客户端:socks5 本地解析,socks5h 代理解析 |
| 认证 | 用户名密码 / IP 白名单 | 用户名密码 / IP 白名单 |
| 兼容性 | 几乎所有软件都支持 | 大部分支持,个别场景受限 |
UDP:别默认 SOCKS5 就能用
SOCKS5 协议本身支持 UDP,但很多代理服务商的网关只转发 TCP。需要 UDP 时,一定要确认服务商写明支持。例如 ProxyWing 在官网注明其数据中心代理支持 UDP(核实于 2026-10-05),其他产品线要单独确认。
另外,Chrome 官方文档说明:Chrome 中的 SOCKS5 只用于代理 TCP 请求,不能转发 UDP。
DNS 解析:socks5 和 socks5h 的区别
这是最容易踩的坑:
socks5://:客户端在本地解析域名,再把 IP 交给代理。本地 DNS 查询会暴露你访问了什么网站,也可能导致解析结果与代理所在地不一致。socks5h://:把域名交给代理,由代理端解析。
curl 和 Python requests 都遵循这个约定(requests 文档写明:socks5 在客户端解析,socks5h 在代理端解析)。做采集和隐私敏感的业务,建议用 socks5h。
配置示例
以下 host:port、user:pass 均为占位符,替换成服务商后台给你的信息。
curl:
# HTTP 代理
curl -x http://user:pass@host:port https://httpbin.org/ip
# SOCKS5,由代理端解析 DNS
curl -x socks5h://user:pass@host:port https://httpbin.org/ip
Python requests:
import requests
# HTTP 代理:注意 https 这一项的值仍然是 http:// 开头
proxies = {
"http": "http://user:pass@host:port",
"https": "http://user:pass@host:port",
}
# SOCKS5 需要先安装:pip install "requests[socks]"
# proxies = {
# "http": "socks5h://user:pass@host:port",
# "https": "socks5h://user:pass@host:port",
# }
r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=15)
print(r.json())
指纹浏览器里怎么选
AdsPower、GoLogin 等指纹浏览器的代理设置里都可以选择 HTTP 或 SOCKS5(具体选项以软件当前版本为准)。几点建议:
- 跟着服务商推荐走:哪个协议的端口是服务商主推的,稳定性通常更有保障;
- 配置后立刻检测:打开检测网站看出口 IP、时区和 WebRTC 是否正常,方法见《如何检测代理 IP 是否干净》;
- 原生 Chrome 不支持 SOCKS5 认证:Chromium 文档写明 Chrome 的 SOCKS5 不支持任何认证方式。如果你在普通 Chrome 或自写的 Selenium 脚本里用带账号密码的 SOCKS5,需要改用 IP 白名单、HTTP 协议,或者通过指纹浏览器来接入。
更多指纹浏览器选型见《指纹浏览器怎么选》。
爬虫里怎么选
- 只抓网页:HTTP 代理最省心,几乎所有库原生支持,不用装额外依赖;
- 需要 DNS 也走代理、或抓非 HTTP 协议:用 SOCKS5(
socks5h); - 并发很高:两者差别通常不在协议,而在代理池质量和服务商网关的并发限制。
主流服务商如 Webshare、Proxy-Seller、DataImpulse、IPFoxy 都同时提供 HTTP 和 SOCKS5,买的时候不必为协议纠结。
常见报错排查
| 现象 | 可能原因 | 处理 |
|---|---|---|
407 Proxy Authentication Required |
账号密码错误,或白名单没加当前 IP | 核对凭据,检查白名单 |
Missing dependencies for SOCKS support |
requests 没装 SOCKS 依赖 | pip install "requests[socks]" |
| 连接被拒绝 / 超时 | 端口和协议不匹配(HTTP 端口填了 SOCKS5) | 核对服务商后台各协议端口 |
SSL: WRONG_VERSION_NUMBER |
代理地址误写成 https://,但代理只支持明文 HTTP |
代理 URL 改为 http:// |
密码含 @、: 等字符导致解析失败 |
URL 中特殊字符没转义 | 对用户名密码做 URL 编码 |
| 检测网站显示 DNS 泄露 | 用了 socks5 而非 socks5h |
改用 socks5h |
合规提醒
代理协议只是工具。数据采集请遵守目标网站的服务条款和 robots 规则,控制请求频率;多账号运营请遵守平台规则。
本站部分链接为推广链接,通过它们购买我们可能获得佣金,但不会影响你的价格与我们的评价。




