常见原因#
- 粘贴的凭据末尾带有空格或换行符。
- 密码中的特殊字符未在代理 URL 中进行 URL 编码。
- 客户端只在收到质询后发送凭据,而工具无法处理 407 往返过程;预先发送
Proxy-Authorization即可解决。 - 密码已轮换:旧密码在宽限期后失效。
- 使用白名单模式,但来源 IP 已更改。
快速检查#
curl -v -x http://USER:PASS@res.hodlproxy.com:9000 https://api.ipify.org407 响应长什么样#
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="proxy"
Content-Length: 0这个状态码由代理而不是网站发出:请求根本没有离开网关。客户端应带上包含有效凭据的 Proxy-Authorization 头重试。
407、401 与 403#
| 状态码 | 发出方 | 含义 |
|---|---|---|
| 407 | 代理 | 先向代理进行认证 |
| 401 | 网站 | 向网站进行认证 |
| 403 | 网站(或代理策略) | 无论是否认证,访问都被拒绝 |
在常用工具中修复 407#
| 工具 | 解决方法 |
|---|---|
| cURL | 把凭据写进代理 URL,或使用 --proxy-user user:pass;对特殊字符进行 URL 编码。 |
| Python requests | 在 proxies 中使用 http://user:pass@host:port;用 urllib.parse.quote 编码密码。 |
| Node.js(axios) | 传入 proxy: { host, port, auth: { username, password } },或使用 URL 中带凭据的代理 agent。 |
| Puppeteer | 用 --proxy-server=host:port 启动,并调用 page.authenticate({ username, password })。 |
| Playwright | 启动时或为上下文传入 proxy: { server, username, password }。 |
| Selenium / Chrome | Chrome 会忽略 --proxy-server 中的凭据:请使用 IP 白名单、扩展程序或可添加凭据的本地中继。 |
from urllib.parse import quote
proxy = f"http://USER-cc-us:{quote('p@ss:w/rd', safe='')}@res.hodlproxy.com:9000"在 HodlProxy 中如何运作#
HodlProxy 返回 407 时使用代码 invalid_credentials;控制面板会显示当前凭据组合,轮换后的旧密码仍可继续使用十分钟,而白名单地址可以使用任意用户名携带参数。
常见问题#
用户名和密码都正确,为什么还是 407?
通常是复制时带上了不可见字符、代理 URL 中的特殊字符没有编码,或者客户端无法应答 407 质询。用 cURL 测试同一组凭据,即可区分是工具问题还是账户问题。
能否完全避免 407?
可以:在控制台把服务器 IP 加入白名单,即可免凭据连接。此时定位改在控制台中设置。
407 是网站封了我吗?
不是。407 是代理在请求到达网站之前返回的。网站封禁通常表现为 403、429、CAPTCHA 或验证页面。