从零开始:网站测速诊断 API 的最小 curl 与 Python 接入
2026/7/18 14:22:15 网站建设 项目流程

适用场景

无论是个人博客、企业服务还是 CDN 加速节点,网站的访问速度直接影响用户体验。传统的测速工具通常需要手动操作或依赖图形界面,无法方便地集成到自动化脚本或监控系统中。网站测速诊断 API提供了一次接口请求即可获取 DNS 解析、TCP 连接、SSL 握手、首字节时间(TTFB)、总耗时以及重定向链和 SSL 证书摘要的能力,非常适合以下场景:

  • 自动化监控:定时检查目标站点各阶段的响应耗时,及时发现性能劣化。
  • 批量检测:结合脚本对多个 URL 进行并发或顺序测速,生成报告。
  • 故障排查:当用户反馈“网站打不开”时,快速从服务器端判断是 DNS 问题、网络问题还是 SSL 握手失败。
  • CI/CD 流水线:在部署后验证新节点或新域名的网络连通性和延迟。

接口能力边界

本 API 的QPS 限制为 2 次/秒,即每秒最多发送 2 个请求,超出会收到限流错误(HTTP 429)。单次请求可以覆盖以下六个维度的指标:

  1. DNS 解析时间:从发起请求到 DNS 域名解析完成。
  2. TCP 连接时间:三次握手耗时。
  3. SSL 握手时间:TLS 协商阶段耗时(如果目标是 HTTPS)。
  4. TTFB:从发起请求到收到第一个响应字节的时间。
  5. 总耗时:整个请求从开始到结束的时间。
  6. 重定向链与最终 URL:自动跟踪 301/302 等重定向,记录跳转次数和最终地址。

此外还会提取响应头中的Content-TypeContent-Length(页面体积)以及 SSL 证书的签发者、有效期等摘要信息(素材中未返回,但文档有提及,以官方文档为准)。

请求参数与鉴权

请求方法 & 地址

  • 方法:GET
  • URLhttps://v1.apizero.cn/api/site-check

Query 参数

参数必填类型说明
urlstring目标网站的 URL。如果省略协议,则自动补https://。例如传入baidu.com实际请求的 URL 会变为https://baidu.com

Header 参数

参数必填类型说明
Authorizationstring用于身份认证的 API Key。具体获取方式请参考官方文档。

素材中 curl 示例使用了-H "X-API-Key: $APIZERO_API_KEY",但按规范应使用Authorization头,实际以文档为准。下面示例中均使用Authorization: Bearer <YOUR_API_KEY>格式。

最小可运行示例:curl

以下 curl 命令演示了最简单的请求方式。你需要将<YOUR_API_KEY>替换为真实的密钥,并将url参数替换为待测网站地址。

curl -sS \ -X GET \ -H "Authorization: Bearer YOUR_API_KEY" \ "https://v1.apizero.cn/api/site-check?url=example.com"

请求说明

  • -sS:静默模式但保留错误输出。
  • -X GET:显式指定 GET 方法(curl 默认也是 GET,可省略)。
  • -H添加鉴权头。
  • URL 参数中url=example.com会自动补全为https://example.com

执行后你会收到类似下面的 JSON 响应(已格式化):

{ "code": 0, "msg": "成功", "data": { "url": "http://example.com", "final_url": "https://example.com/", "http_code": 200, "redirect_count": 1, "timing": { "dns_ms": 23.1, "connect_ms": 28.4, "ssl_ms": 65.2, "ttfb_ms": 132.5, "total_ms": 140.3 } } }

使用 Python 代码接入

对于需要在程序中集成测速功能的开发者,Python 的requests库是最方便的选择。以下是一个最小可运行的 Python 脚本,包含完整的错误处理:

import requests import sys API_URL = "https://v1.apizero.cn/api/site-check" API_KEY = "YOUR_API_KEY" # 替换为真实密钥 def site_check(url: str) -> dict: """调用网站测速诊断 API,返回 JSON 数据""" headers = { "Authorization": f"Bearer {API_KEY}" } params = { "url": url } try: resp = requests.get(API_URL, headers=headers, params=params, timeout=10) resp.raise_for_status() return resp.json() except requests.exceptions.RequestException as e: print(f"请求出现异常: {e}", file=sys.stderr) sys.exit(1) def main(): if len(sys.argv) < 2: print("用法: python site_check.py <URL>") sys.exit(1) target = sys.argv[1] result = site_check(target) if result.get("code") != 0: print(f"API 返回错误: code={result.get('code')}, msg={result.get('msg')}") return data = result["data"] timing = data["timing"] print(f"目标 URL: {data['url']}") print(f"最终 URL: {data['final_url']}") print(f"HTTP 状态码: {data['http_code']}") print(f"重定向次数: {data['redirect_count']}") print("--- 耗时明细 (毫秒) ---") print(f"DNS: {timing['dns_ms']}") print(f"TCP: {timing['connect_ms']}") print(f"SSL: {timing['ssl_ms']}") print(f"TTFB: {timing['ttfb_ms']}") print(f"总耗时: {timing['total_ms']}") if __name__ == "__main__": main()

运行方式

python site_check.py baidu.com

该脚本会打印出测速结果各阶段的毫秒数。你可以将其集成到定时任务或 CI 脚本中,依据耗时阈值进行告警。

返回值详细解读

从素材给出的示例响应可知,最顶层是数组(但实际单次请求返回的是对象,文档示例中用了数组包裹单个对象,实际调用直接返回 JSON 对象)。以实际响应为准。各字段含义如下:

字段类型说明
codeint业务状态码。0 表示成功,非 0 表示错误。
msgstring与 code 对应的描述信息。
data.urlstring请求时传入的原始 URL(可能未补全协议)。
data.final_urlstring经过重定向后的最终 URL。
data.http_codeint最终请求的 HTTP 状态码(如 200、301 等)。
data.redirect_countint重定向跳转次数。
data.timing.dns_msfloatDNS 解析耗时,单位毫秒。
data.timing.connect_msfloatTCP 连接耗时(不含 DNS),单位毫秒。
data.timing.ssl_msfloatSSL 握手耗时(如果未使用 HTTPS 则该值为 0),单位毫秒。
data.timing.ttfb_msfloat首字节时间(TTFB),单位毫秒。
data.timing.total_msfloat从请求到响应结束的总耗时,单位毫秒。

注意:素材未给出 SSL 摘要和页面体积字段,这些可能需要在响应data中额外返回,具体请参考官方文档。

常见错误处理

1. HTTP 401 Unauthorized

  • 原因Authorization头缺失或提供的 API Key 无效。
  • 解决:检查密钥是否正确,并确保使用了正确的 Header 名称(Authorization而非X-API-Key,以文档为准)。

2. HTTP 400 Bad Request

  • 原因:缺少必填参数url,或url格式无法解析。
  • 解决:检查 Query 参数,并确保 URL 字符串正确编码(curl 会自动编码,Python 的requests也会编码)。

3. HTTP 429 Too Many Requests

  • 原因:QPS 超过 2 次/秒。
  • 解决:在短时间内的请求之间加入至少 500ms 的间隔,或者使用队列控制并发。

4. 业务状态码非 0

  • 原因:API 内部处理出错,例如目标网站无法访问、DNS 解析失败、连接超时等。
  • 解决:打印msg字段获取具体原因,并检查目标 URL 是否可达。

工程化注意事项

  1. API Key 管理:不要将密钥硬编码在代码中。建议通过环境变量注入(例如os.getenv("SITE_CHECK_API_KEY"))或使用 .env 文件。
  2. 超时设置:网络请求可能因目标网站响应慢而卡住,Python 中建议设置timeout(如 10 秒)。curl 可加--connect-timeout 5 --max-time 15
  3. 限流处理:QPS 2/s 意味着批量测速时需要控制并发数。可以使用time.sleep(0.6)间隔,或使用令牌桶算法。
  4. 重定向跟踪:API 已经服务端跟踪了重定向链,客户端不需要额外设置allow_redirects=False。但需要注意:如果目标网站重定向次数超过 API 内部限制,可能返回部分结果,具体以文档为准。
  5. 结果存储:将测速结果结构化存入数据库(如 InfluxDB 或 Prometheus),便于长期趋势分析。
  6. 日志记录:记录每次请求的 URL、状态码和耗时,方便排查问题。

参考文档

  • 官方文档页:https://apizero.cn/aidocs/site-check
  • 原始文档(raw):https://apizero.cn/aidocs/site-check/raw.md

本文中的 API 参数、响应字段和 QPS 限制均以上述文档为准,若存在差异请以官方最新说明为准。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询