You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cloud Speech-To-Text通过cURL调用API遇404错误求助

问题原因排查与修复方案

你的操作脚本中存在两个核心错误,直接导致了404 NOT_FOUND错误:

1. 错误的API认证方式

你在cURL请求中直接将服务账号密钥文件里的private_key作为Bearer Token使用,这完全不符合Google Cloud API的认证规则。Google要求的Bearer Token是通过服务账号密钥生成的短期访问令牌,而非原始私钥本身。

错误代码片段:

-H "Authorization: Bearer $(cat $GOOGLE_APPLICATION_CREDENTIALS | jq -r .private_key)"

修复方案:
使用gcloud命令生成合法的访问令牌,和官方教程保持一致即可:

-H "Authorization: Bearer $(gcloud auth application-default print-access-token)"

(注:你已经设置了GOOGLE_APPLICATION_CREDENTIALS环境变量,该命令会自动基于此密钥生成有效令牌)

2. 请求JSON中的变量未被解析

你用单引号包裹了整个JSON请求内容,导致Shell无法解析其中的${PROJECT_ID}变量,最终生成的sync-request.json里的音频URI是字面量gs://${PROJECT_ID}_bucket/brooklyn.flac,而非实际的存储桶路径,这会让Speech-to-Text API找不到目标音频文件。

错误代码片段:

echo '{
  "config": {
      "encoding":"FLAC",
      "sampleRateHertz": 16000,
      "languageCode": "en-US",
      "enableWordTimeOffsets": false
  },
  "audio": {
      "uri":"gs://${PROJECT_ID}_bucket/brooklyn.flac"
  }
}' > sync-request.json

修复方案:
改用双引号包裹JSON内容(注意转义内部的双引号),或者使用here-doc语法让Shell解析变量:

cat > sync-request.json << EOF
{
  "config": {
      "encoding":"FLAC",
      "sampleRateHertz": 16000,
      "languageCode": "en-US",
      "enableWordTimeOffsets": false
  },
  "audio": {
      "uri":"gs://${PROJECT_ID}_bucket/brooklyn.flac"
  }
}
EOF

额外优化建议

  • 你给音频文件设置了AllUsers的读权限,其实只要服务账号拥有存储桶的roles/storage.objectViewer权限即可完成API调用,无需公开文件,这样更安全。
  • 给服务账号授予roles/owner权限过于宽泛,建议遵循最小权限原则,仅授予roles/speech.client和roles/storage.objectViewer权限。

内容的提问来源于stack exchange,提问作者M. D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:34:55