快速回答
代理中的SOCKS5 proxy errors是什么意思?
SOCKS5 错误 分三类:客户端无 SOCKS 支持,服务器拒绝用户名和密码,服务器无法连接目标并返回回复码。使用 CrawlRelay 时,先安装 SOCKS 支持(Python requests:requests[socks]),使用 SOCKS5 端口,并优先选用 socks5h:// 让 DNS 在出口解析,而非本机。
SOCKS5 proxy errors一览
| 错误 | SOCKS5 proxy errors |
|---|---|
| 类型 | SOCKS5 协议或客户端错误 |
| 发送方 | SOCKS5 服务器(回复码)或客户端库(缺少支持) |
| 定义于 | SOCKS5: RFC 1928; username/password authentication: RFC 1929 |
| 要重试吗? | 依回复码而定 |
| 先检查 | 确认客户端支持带认证的 SOCKS5,然后查看回复码 |
SOCKS5 proxy errors是什么意思?
SOCKS5(定义于 RFC 1928)用于转发 TCP 连接,不处理 HTTP。用户名密码认证是另一次小交互,定义于 RFC 1929。认证后客户端请求连接目标主机与端口,服务器以一字节回复码响应。
回复 0x00 表示成功。回复码 0x01 到 0x08 表示失败,涵盖从服务器通用错误到不支持的地址类型。客户端将这些码转换为自己的错误信息。
在Python、curl、Node.js和浏览器中a SOCKS5 error是什么样?
每个工具中相同的失败会有不同的提示信息。请在日志中搜索以下信息:
- 未安装 PySocks 的 Python requests:
InvalidSchema: Missing dependencies for SOCKS support. - curl,认证失败:
curl: (97) User was rejected by the SOCKS5 server - 回复 0x01: “一般 SOCKS 服务器错误”
- 回复 0x04 / 0x05: “目标不可达” / “目标拒绝连接”
- 回复 0x08: “地址类型不支持”
导致a SOCKS5 error的原因是什么?
最可能的首要原因:
- 客户端库无 SOCKS 支持。
- 认证凭据错误或未 URL 编码。
- 用 SOCKS 端口访问 HTTP,或用 HTTP 端口访问 SOCKS。
- 目标从出口被拒绝或不可达。
- 本地 DNS 与
socks5://: 客户端自行解析主机名,可能失败或返回错误区域地址。
如何一步步诊断a SOCKS5 error?
- 确认支持 SOCKS:Python 使用
pip show pysocks;Node.js 使用 SOCKS 代理包。 - 使用
--socks5-hostname对 SOCKS5 端口执行下面 curl 测试。 - 查看回复码或消息。
- 比较同一目标的
socks5://与socks5h://。
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL如何修复a SOCKS5 error?
- 安装支持:
pip install "requests[socks]";Node.js 使用 SOCKS 代理包。 - 使用 SOCKS5 端口 访问
socks5h://URL,HTTP 端口访问http://URL。 - 优先使用
socks5h://, 让出口解析 DNS,匹配本地访问体验。 - 遇回复 0x04 或 0x05, 直接在无代理状态下测试目标,可能目标宕机或拒绝服务。
- 浏览器使用 HTTP 端口, Chromium 不支持 SOCKS5 认证。
import requests
# socks5h:// sends the hostname to the proxy, so DNS resolves at the exit
proxy = "socks5h://USERNAME:[email protected]:7778"
r = requests.get("https://api.ipify.org", proxies={"http": proxy, "https": proxy}, timeout=(10, 30))
print(r.status_code, r.text)遇到a SOCKS5 error后要重试吗?
仅重试目标端失败(如主机不可达或连接拒绝)且仅在新出口上重试一次。认证失败和缺少客户端支持的问题需修正配置后才能解决。
SOCKS5 proxy errors如何应用于CrawlRelay?
CrawlRelay 在专用端口提供 SOCKS5 服务,用户名格式和密码与 HTTP 端口相同。目标选择和会话用法两端一致。
网关:gw.crawlrelay.com,端口7777(通过CONNECT的HTTP、HTTPS)和端口7778(SOCKS5)。用户名格式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。相关内容:无法连接代理 · curl 指南 · Python 指南。
SOCKS5 proxy errors:开发者常问的问题
socks5:// 和 socks5h:// 有什么区别?
使用 socks5:// 时,您的客户端会先解析主机名到 IP 地址,然后将 IP 发送给代理。使用 socks5h:// 时,它发送主机名,由代理端解析。抓取时使用 socks5h://:DNS 解析发生在出口节点,因此您会获得与本地访问者相同区域的结果。
抓取时我应该使用 SOCKS5 代理还是 HTTP 代理?
对于网页,两者都可用,HTTP 代理更简单:所有 HTTP 库和浏览器都支持带身份验证的 HTTP 代理。非 HTTP 协议或仅支持 SOCKS 的工具使用 SOCKS5。基于 Chromium 的浏览器无法对 SOCKS5 进行身份验证,请使用 HTTP 端口。
为什么 curl 显示“用户被 SOCKS5 服务器拒绝”?
SOCKS5 服务器拒绝了用户名和密码的交换。请检查凭据,URL 编码特殊字符,并确认您使用的是 SOCKS5 端口。如果账户有效,相同的用户名和密码在 HTTP 端口应能正常使用。
本参考中的其他代理错误
HTTP 状态码
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
浏览器和客户端错误
连接和 TLS 错误
带有涵盖失败案例文档的住宅代理
来自US$0.50/GB的CrawlRelay住宅代理,流量永不过期。