Gemini API 请求超时,未必是模型服务故障。请求可能在 DNS 解析、代理连接、TLS 握手、服务端处理或返回数据的任一环节停住;网页端能打开,也不代表运行 API 的终端、服务器或容器使用了同一条网络路径。排查时先记录请求时间、调用环境、错误类型和响应状态,再逐项缩小范围,不要一开始就换模型、改密钥或同时调整多个网络设置。

先判断超时发生在哪一层

先区分“连接不上”和“连接后没有及时得到完整响应”。连接超时通常意味着客户端无法在预设时间内与目标主机建立连接;读取超时则可能发生在连接建立之后,例如服务端仍在处理、代理连接不稳定,或响应数据没有继续到达。不同 SDK 对这些错误的命名不完全一致,应结合异常类型、错误消息和请求阶段判断。

如果收到 HTTP 状态码,问题通常已经不只是网络连通性。常见判断方向如下:

  • 401 或 403:检查 API 密钥是否正确、项目与凭据是否匹配,以及账号、地区和项目是否具备使用该 API 的条件。不要把认证拒绝当成超时处理。
  • 429:查看配额、速率限制和账单状态。适当降低并发、控制请求频率,再依据响应信息安排重试;不断立即重发可能让限制持续更久。
  • 400:优先检查请求体、模型名称、参数格式与 API 版本。请求未被接受时,延长网络超时时间通常不会解决问题。
  • 5xx 或连接被重置:可能涉及服务端暂时异常、中间网络设备或代理链路。保存时间戳和可公开的请求信息,间隔后复测,不要公开密钥或完整请求日志。

可先用相同设备、相同网络和相同密钥做一条最小请求,再把测试移到另一种网络环境。每次只改变一个条件:例如先关闭代理测试,再启用代理测试;或只调整读取超时,不同时改 DNS、模型和并发。这样才能知道哪个变化真正影响了结果。

5 步

分层排查顺序

2 类

连接与读取超时

1 项

每次调整的变量

确认 API 服务、账号与调用入口

确认正在使用的是 Gemini API,而不是把 Gemini 网页端地址当作 API 地址。API 调用通常通过 Google 提供的接口端点、模型名称和 API 密钥完成;网页端则使用浏览器会话及其产品界面。两者的认证方式、服务开通条件、请求格式、配额和网络路径可能不同,因此“浏览器里能对话”不能证明 API 项目已开通,也不能证明服务器可以访问 API 端点。

先从当前官方文档或控制台核对接口地址、模型标识、API 版本和项目状态。文档会随产品调整,旧代码中保存的模型名、端点或参数不一定仍适用。检查密钥是否属于预期项目、是否被限制为特定来源,以及相关 API 是否已启用。若请求从云主机、容器或公司网络发出,还要确认该运行环境本身的出口策略;本地电脑测试通过,并不能代表部署环境也能访问。

同时核对服务在你的所在地、账号和项目条件下是否可用,并遵守服务条款和组织网络政策。网络代理只能改变请求经过的网络路径,不能替代服务资格、账号权限或配额,也不应被用来绕过服务地域限制。如果服务端明确拒绝请求,应先按官方支持范围处理,而不是反复更换出口地址。

网页端和 API 的要求差异,也解释了为什么同一台电脑上网页看似正常,代码却持续失败:浏览器可能使用系统代理、已有登录会话或不同的 DNS 解析路径,而 Python、Node.js、命令行工具和容器可能各自采用另一套代理配置。确认实际发出请求的进程,才是排查入口。

  • ✅ 在官方控制台核对项目、凭据、API 启用状态及当前配额提示。
  • ✅ 确认代码调用的是 API 接口,而不是网页端地址或过期示例。
  • ✅ 分别在开发电脑与实际部署环境测试,记录两者的网络配置差异。
  • ❌ 不要在公开 issue、聊天记录或截图中粘贴 API 密钥、完整请求 URL 或带令牌的日志。

若你正在比较不同网络工具或客户端的连接方式,可参考VPNSR VPN推荐了解本站服务信息;选择网络路径时仍应以 API 官方支持条件和你所在网络的规定为准。

检查 DNS、端口连通与 TLS

DNS 异常可能表现为域名无法解析、解析结果不稳定,或只有某一台主机无法访问。可以在实际运行代码的设备上查询 API 域名,而不是只在另一台电脑上测试。Windows 可使用 nslookup generativelanguage.googleapis.com;macOS 或 Linux 可使用 dig generativelanguage.googleapis.com。如果系统没有安装 dig,也可使用系统现有的 DNS 查询工具。

查询结果不一致时,先检查设备当前使用的 DNS 服务器、公司网络策略和本地 DNS 缓存。不要只凭返回了一个 IP 地址就判断 DNS 一定正常:解析成功仅表示域名查询有结果,后续仍可能被路由、出口防火墙、代理或 TLS 检查设备阻断。也不要把某次查询到的地址永久写进 hosts 文件;服务端地址可能变化,固定映射会造成后续故障。

接下来测试 HTTPS 连通性。使用系统的 curl 访问 API 主机时,先只验证能否完成 DNS、TCP 和 TLS 连接;不要把真实密钥放进测试命令或共享终端记录。若浏览器能打开相关页面但命令行连接失败,检查命令行使用的代理、证书信任链及运行环境。公司网络若进行 TLS 检查,应向网络管理员确认受管设备的证书与政策,不要随意关闭证书校验来“解决”握手错误。

连接诊断结果可按顺序理解:域名解析失败,先查 DNS;域名可解析但 TCP 连接失败,检查出口规则和代理;连接建立但 TLS 握手失败,检查系统时间、证书链、TLS 检查和代理配置;TLS 正常而 API 返回状态码,则转向身份验证、请求格式、配额或服务状态。这个顺序能避免把所有问题都归结为“线路慢”。

排查时记录的是错误类别和发生阶段,不是秘密凭据。日志中的 API 密钥、认证头、带密钥的请求地址、提示词和用户数据都可能敏感;分享日志前先脱敏,并遵守组织的数据处理规则。

检查代理变量与出口 IP

命令行、脚本和 SDK 不一定自动读取桌面客户端的系统代理。常见环境变量包括 HTTPS_PROXY、HTTP_PROXY、ALL_PROXY 及相应的小写形式;也有程序使用自己的代理选项,或完全忽略这些变量。先在启动程序的同一个终端、服务配置或容器环境中检查变量是否设置,再确认代理地址、端口、认证方式和协议类型正确。

如果环境中设置了 NO_PROXY,核对目标域名是否被误列为直连例外;如果代理地址指向已经停止的本地进程,调用就可能等待到超时。反过来,清除代理变量也不一定能让请求直连,因为系统路由、防火墙或组织网络策略仍可能要求经过指定网关。修改服务环境变量后,通常需要重启对应进程或容器,让新配置真正生效。

对需要稳定运行的服务,建议固定并记录预期的出口路径,减少请求期间频繁切换网络、代理节点或出口 IP。若项目控制台或组织策略使用 IP 访问限制,应由管理员核对当前出口地址是否在允许范围内;动态变化的出口可能导致间歇性拒绝。不要把“出口固定”误解为必须使用某一种线路,也不要假设代理节点所在地区就代表 API 一定支持该账号或项目。

需要区分网页端与程序的代理状态时,可以分别测试浏览器和发起 API 请求的进程,并对照其 DNS、代理变量、出口策略与证书环境。使用客户端配置教程时,也应留意教程面向的是客户端网络连接;API 程序是否经过同一代理,仍需在运行该程序的环境中单独验证。

排查结论:先确认 API 服务条件,再核对 DNS、代理变量和实际出口;不要用网页端可访问来替代程序环境测试。

合理设置超时并控制重试

网络请求通常至少涉及连接超时和读取超时。连接超时过短时,网络稍有波动就会在建立连接前失败;读取超时过短时,较长的模型处理过程可能被客户端提前中断。应根据 SDK 文档分别设置连接和读取限制,并结合实际请求类型观察。生成内容长度、输入规模、并发量及服务端处理状态都会影响响应时间,不宜把某个固定数值当成适用于所有请求的保证。

使用命令行进行最小化测试时,可通过 --connect-timeout 限制建立连接的等待时间,并用 --max-time 设置整次请求的上限。下面仅展示配置位置;密钥应通过受控的环境变量或密钥管理方式提供,不要把真实值写进源代码、命令历史、日志或版本库。

curl --silent --show-error \
  --connect-timeout 10 \
  --max-time 60 \
  -H "Content-Type: application/json" \
  "https://generativelanguage.googleapis.com/v1beta/models/MODEL:generateContent?key=${GEMINI_API_KEY}" \
  -d '{"contents":[{"parts":[{"text":"Reply with OK"}]}]}'

示例中的等待时间只是一次诊断配置,不代表官方推荐值,也不能证明服务在该时间内必然返回。实际使用时应按客户端库的参数定义配置,并确认代理的连接与读取限制没有比客户端更短。若代理提前关闭连接,单独放大 SDK 的读取超时并不会解决问题。

重试要有边界。对明确的临时网络错误或服务端暂时性错误,可采用逐步增加等待时间并加入随机抖动的退避策略,同时限制并发和重试次数。收到认证错误、无效参数或配额拒绝时,应先修正原因,不要盲目重试。请求在客户端超时,也不必然代表服务端没有处理完成;对可能产生费用或副作用的操作,重试前应考虑重复提交的影响,并依据 API 文档设计请求追踪和结果核对。

  • 连接阶段失败:检查 DNS、代理连通性、出口防火墙和连接超时。
  • 已连接但等待响应超时:检查读取超时、请求大小、并发及代理是否过早断开。
  • 返回明确状态码:按认证、参数、配额或服务状态处理,而不是只增加超时。
  • 偶发失败后恢复:记录时间与请求标识,采用有限退避重试,不要高频循环发送。

整理可复现的排查记录

如果问题仍未定位,整理一份不含秘密信息的最小复现记录,通常比反复更换线路更有用。记录调用发生的日期与时区、运行平台、语言或 SDK 版本、使用的模型标识、错误类型、HTTP 状态码、请求阶段、代理是否启用以及同一环境下 DNS 与 HTTPS 测试的结果。不要附上 API 密钥、认证头、完整带参数的 URL、用户输入或含个人信息的响应内容。

对比测试时保持请求体和代码不变,分别验证直连与已获准的代理路径、开发机与部署环境、当前 DNS 与组织指定 DNS。若只有容器失败,重点检查容器的环境变量、网络命名空间、证书和出口规则;若只有某个 SDK 失败,使用最小请求比较其超时与代理实现;若所有客户端都收到相同的拒绝状态,则优先查账号、项目、区域支持与配额,而不是继续调整本机网络。

将修复步骤逐项记录,确认改变后是否能稳定复现改善,并在完成诊断后撤销临时配置,例如临时代理、调试日志或放宽的超时。长期服务应使用安全的密钥管理、明确的并发限制、适当的超时与有限重试,并监控错误类别变化;不要记录完整凭据,也不要把不断轮换出口当作稳定性方案。

一句话总结:先定位失败层,再一次调整一个变量;网页端正常不是 API 连通证明,代理、出口和配额也需要分别验证。