php 8.4 接入 deepseek 时需区分网络层、业务层和运行时三类异常:guzzle 下捕获 requestexception(含 4xx/5xx)、connectexception/timeoutexception(网络问题),curl 方式则须检查 curl_errno() 和 http 状态码,并解析响应中 error.type 等字段定位 deepseek 特定错误,配合 php 8.4 链式异常与脱敏日志提升可观测性。

PHP 8.4 接入 DeepSeek 时,捕获接口异常的关键在于区分三类错误:HTTP 网络层失败、API 服务返回的业务错误(如 400/401/429)、以及 PHP 运行时异常。只要请求逻辑封装得当,异常信息就能清晰定位问题源头。
使用 Guzzle 时的标准异常捕获方式
Guzzle 在 PHP 8.4 下默认启用严格异常策略。HTTP 错误响应(4xx/5xx)会自动抛出 GuzzleHttp\Exception\RequestException,网络超时或连接失败则抛出 GuzzleHttp\Exception\ConnectException 或 GuzzleHttp\Exception\TimeoutException。
- 必须用 try/catch 包裹
$client->post()调用 - 捕获
RequestException后,可通过$e->getResponse()获取原始响应体,再解析 JSON 中的 error 字段 - 捕获
ConnectException或TimeoutException表示网络不可达或超时,应检查服务器 outbound 连接、DNS、防火墙或 DeepSeek 域名是否可解析 - 未捕获的
JsonException(PHP 8.4 新增)可能出现在json_decode($body, true, 512, JSON_THROW_ON_ERROR)失败时,需单独 catch
手动 cURL 方式下的错误提取要点
cURL 不自动抛异常,需主动判断 curl_errno() 和 HTTP 状态码:
- 调用
curl_exec()后立即检查curl_errno($ch):非零值说明底层网络失败(如 CURLE_COULDNT_RESOLVE_HOST) - 用
curl_getinfo($ch, CURLINFO_HTTP_CODE)获取状态码;401 表示密钥无效,429 表示限流,500 表示服务端错误 - 即使 HTTP 状态码是 200,响应体仍可能是 JSON 错误格式(如
{"error": "invalid_prompt"}),需用json_last_error()验证解析结果 - 建议在
curl_setopt_array()中设置CURLOPT_FAILONERROR => false,确保所有响应都进入处理流程,不被自动拦截
DeepSeek 特定错误的识别与处理
DeepSeek API 返回的 JSON 错误结构较统一,典型字段包括 error.message、error.type、error.param:
-
"error.type": "invalid_api_key"→ 检查环境变量DEEPSEEK_API_KEY是否加载正确,是否多空格或换行 -
"error.type": "rate_limit_exceeded"→ 当前账户已超配额,需查看控制台用量统计或升级套餐 -
"error.message": "prompt is empty"→ 请求体中prompt字段为空字符串或 null,应在发送前做 trim() 和 isset() 校验 - 若响应体为空但 HTTP 状态码为 200,大概率是 TLS 握手失败或证书校验被拒,确认 PHP 已启用 OpenSSL 扩展且
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true)配置合理
日志记录建议(适配 PHP 8.4)
利用 PHP 8.4 的 throw new Exception(..., $code, $previous) 链式异常能力,把原始错误上下文完整透传:
- 记录请求 URL、请求头(隐藏密钥)、脱敏后的请求体(如截取 prompt 前 50 字符)
- 记录响应状态码、响应头(特别是
X-RateLimit-Remaining)、原始响应体(若非敏感) - 对
RequestException使用$e->getHandlerContext()提取重试次数、DNS 解析耗时等调试信息 - 避免在生产环境 echo 或 var_dump 敏感数据,统一走 Monolog 或 error_log 并配置敏感字段过滤
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











