# 407 代理身份验证要求：含义及修复方法

> HTTP 407 代理身份验证要求 意味着代理拒绝了您的凭据或根本未接收到凭据。Python、curl、Node 中的具体错误信息及其解决方法。

- URL: https://crawlrelay.com/zh/docs/errors/407-proxy-authentication-required/
- 最后更新: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

HTTP 状态码（4xx，客户端错误）：每个工具中的精确错误信息、可能原因排序及有效解决方案。

**快速回答 — 代理中的407 Proxy Authentication Required是什么意思？**

**407 代理身份验证要求** 表示代理拒绝了您的请求，因为它未收到凭据或凭据错误。目标网站根本未被访问。使用 CrawlRelay 居住型代理时，请检查三点：用户名是否与您的控制面板显示一致，密码是否匹配，以及用户名或密码中的特殊字符是否已进行 URL 编码。重试相同请求永远无法解决 407 错误。

## 407 Proxy Authentication Required一览

| 属性 | 值 |
| --- | --- |
| 错误 | 407 Proxy Authentication Required |
| 类型 | HTTP 状态码（4xx，客户端错误） |
| 发送方 | 代理网关，而非目标网站 |
| 定义于 | RFC 9110, section 15.5.8 (headers: Proxy-Authenticate 11.7.1, Proxy-Authorization 11.7.2) |
| 要重试吗？ | 不。相同的凭据再次失败；请先修正它们 |
| 先检查 | 使用裸用户名且不带任何目标参数，运行下面的 curl 测试 |

## 407 Proxy Authentication Required是什么意思？

407 错误来源于代理，而非您想访问的网站。RFC 9110 将其描述为代理版的 401：客户端必须先通过代理身份验证，后续操作才会进行。代理发送 `Proxy-Authenticate` 头部，指定接受的身份验证方案，几乎总是 `Basic`。您的客户端则使用带有 Base64 编码的 `Proxy-Authorization` 头部响应 `username:password`。

对于 HTTPS 目标，407 是对打开隧道的 `CONNECT` 请求的响应。这也是许多库将其报告为隧道或连接错误而非 HTTP 状态码的原因：与网站建立的 TLS 会话根本未启动。

## 在Python、curl、Node.js和浏览器中a 407是什么样？

每个工具中相同的失败会有不同的提示信息。请在日志中搜索以下信息：

- **Python requests：** `ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required'))`
- **curl：** `curl: (56) CONNECT tunnel failed, response 407`
- **Scrapy：** `TunnelError: Could not open CONNECT tunnel with proxy ... [{'status': 407, 'reason': b'Proxy Authentication Required'}]`
- **Chrome、Playwright、Puppeteer：** `net::ERR_TUNNEL_CONNECTION_FAILED`，或者浏览器中弹出的登录窗口
- **Node.js 客户端访问 http:// 目标：** `Request failed with status code 407`

## 导致a 407的原因是什么？

最可能的首要原因：

- **用户名或密码错误。** 可能是输入错误、重置后的旧密码，或是另一个子用户的凭据。
- **特殊字符未编码。** 密码中含有 `@`、`:`、`/` 或 `#` 会破坏 `user:pass@host` URL。请百分比编码：`@` 转为 `%40`，`:` 转为 `%3A`。
- **目标后缀格式错误。** 如果代理从用户名中读取目标信息，则用户名应为完整格式。关键字或国家码的拼写错误会导致代理无法识别该用户名。
- **凭据未发送出去。** Chrome 会忽略在 `--proxy-server` 内写入的用户名和密码。Puppeteer 需要 `page.authenticate()`，Selenium 则需要本地转发代理。
- **余额为零。** 请先确认账户仍有流量余额再调试代码。

## 如何一步步诊断a 407？

1. 使用 curl 测试凭据且不要带任何目标参数（如下命令）。详尽输出中出现 `HTTP/1.1 407` 表示凭据有问题。
2. 逐个添加目标参数，每添加一个重测一次。
3. 记录程序实际生成的代理 URL（密码隐藏），并逐字符与控制面板对比。
4. 若 curl 成功但程序失败，说明库未发送凭据。请参阅以下针对工具的修复方法。

*用curl测试失败的URL（HTTP端口，详细模式）*

```bash
# 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:PASSWORD@gw.crawlrelay.com: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 407？

- 在构造 URL 前，使用 Python 的 `urllib.parse.quote(value, safe='')` 或 JavaScript 的 `encodeURIComponent()` 对凭据进行编码。
- 浏览器中，在 Playwright 的 `proxy` 参数里传递 `username` 和 `password`，Puppeteer 中调用 `page.authenticate()`，Selenium 使用本地转发。参见 [Playwright ](https://crawlrelay.com/zh/docs/playwright/)] 和 [Puppeteer ](https://crawlrelay.com/zh/docs/puppeteer/)] 指南。
- 环境变量中，如果设置了 `HTTPS_PROXY`，请在 shell 中用引号括全以保留 `@` 和 `$` 字符。
- 如果怀疑泄露，请在控制面板中更新密码，并同步更新所有使用该密码的爬虫。

*Python：用编码后的凭证构建代理URL*

```python
from urllib.parse import quote

import requests

user = "USERNAME-country-us"
password = "p@ss:word/1"  # example containing special characters

# safe="" also encodes "/", "@" and ":" inside the credentials
proxy = "http://{}:{}@gw.crawlrelay.com:7777".format(
    quote(user, safe=""), quote(password, safe="")
)
proxies = {"http": proxy, "https": proxy}  # http:// for both keys

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

*Playwright（Python）：凭证作为独立字段*

```python
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "http://gw.crawlrelay.com:7777",
        "username": "USERNAME-country-us",
        "password": "PASSWORD",
    })
    page = browser.new_page()
    response = page.goto("https://api.ipify.org")
    print(response.status, page.inner_text("body"))
    browser.close()
```

## 遇到a 407后要重试吗？

不要自动重试 407。相同凭据重试会得到同样结果，频繁重试只会填满日志。将 407 视为配置错误：停止任务，修正凭据，再重新启动。如果长期正常的任务突然出现 407，通常是密码被修改或子用户被禁用。

## 407 Proxy Authentication Required如何应用于CrawlRelay？

CrawlRelay 网关在每次新连接时读取用户名和密码。目标和会话设置都包含在用户名中，因此即使密码正确，后缀格式错误也会导致失败。请用一个辅助函数生成用户名，启动时记录输出。查看 [快速入门页面 ](https://crawlrelay.com/zh/docs/)] 获取精确格式。

网关：`gw.crawlrelay.com`，端口7777（通过CONNECT的HTTP、HTTPS）和端口7778（SOCKS5）。用户名格式：`USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}`。相关内容：[401 vs 407 ](https://crawlrelay.com/zh/docs/errors/401-unauthorized/) · [ERR_TUNNEL_CONNECTION_FAILED ](https://crawlrelay.com/zh/docs/errors/err-tunnel-connection-failed/) · [无法连接到代理 ](https://crawlrelay.com/zh/docs/errors/cannot-connect-to-proxy/)。

## 407 Proxy Authentication Required：开发者常问的问题

### 407 是目标网站发的吗？

不会。407 总是由位于您和网站之间的代理发送，请求根本未到达网站，因此网站无法看到、计数或因此封禁您的流量。如果网站需要登录，会返回 401。请修正代理凭据，407 将消失。

### 为何我的代码使用相同代理时出现 407，而 curl 正常？

您的库没有发送凭据，或以不同格式发送。常见原因是将凭据输错浏览器标记，导致被忽略；环境变量中丢失特殊字符；或密码未 URL 编码。打印代码生成的代理 URL（密码隐藏）并与 curl 命令对比。

### 407 会消耗我的套餐流量吗？

407 响应数据只有几百字节，且请求未到达目标，因此无页面下载。成本主要体现在爬虫卡在 407 重试循环上，浪费时间并充满日志。请将 407 视为严重错误。

## 本参考中的其他代理错误

- [401 Unauthorized vs 407](https://crawlrelay.com/zh/docs/errors/401-unauthorized/)
- [403 Forbidden](https://crawlrelay.com/zh/docs/errors/403-forbidden/)
- [407 Proxy Authentication Required](https://crawlrelay.com/zh/docs/errors/407-proxy-authentication-required/)
- [429 Too Many Requests](https://crawlrelay.com/zh/docs/errors/429-too-many-requests/)
- [502 Bad Gateway](https://crawlrelay.com/zh/docs/errors/502-bad-gateway/)
- [503 Service Unavailable](https://crawlrelay.com/zh/docs/errors/503-service-unavailable/)
- [504 Gateway Timeout](https://crawlrelay.com/zh/docs/errors/504-gateway-timeout/)
- [Cannot connect to proxy (ProxyError)](https://crawlrelay.com/zh/docs/errors/cannot-connect-to-proxy/)
- [Connection reset by peer (ECONNRESET)](https://crawlrelay.com/zh/docs/errors/connection-reset/)
- [ERR_PROXY_CONNECTION_FAILED](https://crawlrelay.com/zh/docs/errors/err-proxy-connection-failed/)
- [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/zh/docs/errors/err-tunnel-connection-failed/)
- [Read timed out (ReadTimeout)](https://crawlrelay.com/zh/docs/errors/read-timeout/)
- [SOCKS5 proxy errors](https://crawlrelay.com/zh/docs/errors/socks5-proxy-errors/)
- [SSL: CERTIFICATE_VERIFY_FAILED](https://crawlrelay.com/zh/docs/errors/ssl-certificate-verify-failed/)
- [SSL: WRONG_VERSION_NUMBER](https://crawlrelay.com/zh/docs/errors/ssl-wrong-version-number/)

**带有涵盖失败案例文档的住宅代理** 来自US$0.50/GB的CrawlRelay住宅代理，流量永不过期。 [查看价格](https://crawlrelay.com/zh/pricing/) · [快速开始](https://crawlrelay.com/zh/docs/)

---

CrawlRelay: CrawlRelay 是为开发者设计的住宅代理和 4G/5G 移动代理轮换服务，适用于爬虫和 AI 数据管道：按需付费且流量永不过期，最低流量从 US$0.50/GB 起，支持加密货币支付，无需上传身份证明。无需 KYC —— 无需身份证、自拍和任何证件。支持加密货币支付。
