> ## Documentation Index
> Fetch the complete documentation index at: https://help.miyaip.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 代理延迟测试：curl 连接时间、首字节与总耗时

> 在 macOS、Linux 或 Windows 上比较直连和代理请求，测量连接时间、首字节与总耗时，并区分 ping 与实际应用延迟。

在实际运行任务的设备上，对同一目标测量直连和代理请求。记录完整请求及错误，比单次最低 ping 更能解释实际体验。[来源：MiyaIP 延迟测试说明](https://miyaip.com/blog/proxy-latency-test)。

## 准备可比较的测试

<Steps>
  <Step title="固定配置与目标">
    复制后台生成的主机、端口、用户名和密码。记录入口、目标出口地区、协议、会话模式与测试时间。

    下面 **[https://example.com/](https://example.com/)** 只用于展示命令格式。将每条命令中的目标替换成同一个实际测试 URL。选择响应较小的页面或接口，保持请求方法与重定向处理一致。示例不跟随重定向，不下载网页子资源。
  </Step>

  <Step title="测量直连基线">
    先运行对应平台的直连命令。**--noproxy '\*'** 明确禁用这次请求的代理，避免环境变量让基线仍经过代理。
  </Step>

  <Step title="测量代理路径">
    选择与你的后台协议一致的 HTTP 或 SOCKS5 命令，替换全部大写占位符后运行。

    HTTP 代理入口与 HTTPS 目标是两个设置；只有后台明确提供 TLS 代理入口时才使用 https\:// 代理方案。SOCKS5 示例使用 socks5h://，让代理解析目标域名。
  </Step>

  <Step title="重复并记录失败">
    每种配置顺序测试 **5–10 次**。保持设备、网络、目标、响应规模与会话设置一致，保存 HTTP 状态、curl 退出码、错误及三项时间。

    分别统计成功请求总耗时的中位数、最小值与最大值，并记录 **失败次数 / 总次数**。超时、认证失败及目标错误不作为“0 秒成功”。粘性比较时保留同一组凭据，见[轮换与会话](/zh/guides/rotation-sessions)。
  </Step>
</Steps>

## macOS 或 Linux

### 直连

```bash theme={null}
curl --noproxy '*' --connect-timeout 10 --max-time 30 --output /dev/null --silent --show-error --write-out 'http=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' --url 'https://example.com/'
printf 'curl_exit=%s\n' "$?"
```

### HTTP 代理

```bash theme={null}
curl --proxy 'http://PROXY_HOST:PROXY_PORT' --proxy-user 'PROXY_USERNAME:PROXY_PASSWORD' --noproxy '' --connect-timeout 10 --max-time 30 --output /dev/null --silent --show-error --write-out 'http=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' --url 'https://example.com/'
printf 'curl_exit=%s\n' "$?"
```

### SOCKS5 代理

```bash theme={null}
curl --proxy 'socks5h://PROXY_HOST:PROXY_PORT' --proxy-user 'PROXY_USERNAME:PROXY_PASSWORD' --noproxy '' --connect-timeout 10 --max-time 30 --output /dev/null --silent --show-error --write-out 'http=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' --url 'https://example.com/'
printf 'curl_exit=%s\n' "$?"
```

`--noproxy ''` 清除该次请求的代理绕过列表。`socks5h://` 使用代理端域名解析；`socks5://` 使用本地解析。

## Windows PowerShell

使用 `curl.exe` 避免 `curl` 别名；用 `NUL` 丢弃响应正文，不能照抄 Unix 的 `/dev/null`。

### 直连

```powershell theme={null}
curl.exe --noproxy '*' --connect-timeout 10 --max-time 30 --output NUL --silent --show-error --write-out 'http=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' --url 'https://example.com/'
"curl_exit=$LASTEXITCODE"
```

### HTTP 或 SOCKS5 代理

```powershell theme={null}
$latencyProxy = 'http://PROXY_HOST:PROXY_PORT'
# For SOCKS5, use 'socks5h://PROXY_HOST:PROXY_PORT'
$latencyPreviousNoProxy = $env:NO_PROXY
try {
  $env:NO_PROXY = ''
  curl.exe --proxy $latencyProxy --proxy-user 'PROXY_USERNAME:PROXY_PASSWORD' --connect-timeout 10 --max-time 30 --output NUL --silent --show-error --write-out 'http=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' --url 'https://example.com/'
  "curl_exit=$LASTEXITCODE"
} finally {
  $env:NO_PROXY = $latencyPreviousNoProxy
}
```

按后台协议设置 `$latencyProxy`。示例临时清空并恢复 `NO_PROXY`，避免排除规则使请求直连，也避免旧版 PowerShell 丢失空字符串参数的问题。

## 读取时间与错误

| 输出 | 含义 | 解释方式 |
| - | - | - |
| `http` | 收到的 HTTP 状态 | 与目标预期状态比较；curl 退出码为 0 不代表 HTTP 状态符合任务预期 |
| `curl_exit` | curl 退出码 | 非 0 表示传输错误，结合错误正文判断 |
| `connect` | 从开始到 TCP 连接建立的累计秒数 | 代理测试通常对应客户端到代理入口的连接 |
| `ttfb` | 从开始到首字节到达的累计秒数 | 包含前面连接、隧道/TLS 与响应等待 |
| `total` | 整次传输完成的秒数 | 同时受响应大小和传输速度影响 |

这些时间互相包含，不要将三项相加。直连也慢时，继续检查本地网络和目标；连接阶段慢时检查入口路径；首字节或总耗时增加时，需要结合目标响应与传输情况判断。单个时间无法分离服务内部每一段延迟。

每次新启动 curl 通常建立新连接，实际应用可能复用连接。先用一致的命令定位，再测试真实应用的行为。参数与时间定义见 [curl 官方手册](https://curl.se/docs/manpage.html)。

## ping 只检查入口的 ICMP

可选地运行以下命令。只填写代理主机，不填写端口、URL 或凭据。

Windows：

```powershell theme={null}
ping -n 10 PROXY_HOST
```

macOS 或 Linux：

```bash theme={null}
ping -c 10 PROXY_HOST
```

ping 不完成代理认证，也不经过代理出口请求目标网站。ICMP 超时与代理服务不可用不能直接等同；ping 成功也不能确认代理协议和账号有效。

## 区分在线工具与本地测试

[MiyaIP Proxy Checker](https://miyaip.com/tools/proxy-checker) 从测试服务向固定 HTTPS 目标发起代理请求，用于检查连接、协议和出口。[Proxy Speed Test](https://miyaip.com/tools/proxy-speed-test) 从当前 MiyaIP 测试节点执行多次探测与下载测试。

在线结果不包含你的本地 Wi-Fi、运营商及设备到入口这一段路径，也不等于实际应用目标的时间。当前 Speed Test 默认下载阶段约 8 MiB，另有探测开销；它测下载，不测上传。具体探测方式以工具当前说明为准。

先核验出口，再比较时间，最后用实际应用复测。本文没有给出产品性能基准；选择可接受的耗时与失败率应以你的实测任务为依据。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.