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

如何解决Windows环境Github Actions发POST请求至Sentry的JSON错误

修复Windows PowerShell中Sentry通知请求的JSON格式错误

问题场景

在GitHub Actions的windows-latest环境中,执行PowerShell脚本向Sentry发送新版本通知,脚本构造的JSON在控制台输出看似正确,但服务器始终返回错误:Expecting property name enclosed in double quotes。原脚本如下:

- name: Notify Sentry
run: |
  $VERSION_NAME = "${{ github.ref_name }}"
  $REQUEST = "{`\"version`\": `\"$VERSION_NAME`\"}"
  echo $REQUEST
  curl -X POST -H "Content-Type:application/json" -d "$REQUEST" "https://sentry.io/api/hooks/release/builtin/...id.../...token.../"

执行日志显示输出的JSON为{"version": "v1.1.1"},但请求仍失败。

问题根源

在Windows PowerShell中,curl是Invoke-WebRequest的别名,并非原生的curl工具。当使用这个别名传递-d参数时,PowerShell会对JSON字符串进行额外的解析和转义处理,导致实际发送到服务器的JSON格式被破坏——虽然控制台输出的JSON看起来正常,但传递给服务端的内容已经出现格式错误。

修复方案

方案1:使用PowerShell原生Invoke-RestMethod(推荐)

PowerShell的Invoke-RestMethod专门用于处理HTTP请求,能自动正确处理JSON格式,避免手动构造字符串的转义问题:

- name: Notify Sentry
  run: |
    $VERSION_NAME = "${{ github.ref_name }}"
    # 用哈希表构造数据,再转成标准JSON
    $requestBody = @{ version = $VERSION_NAME } | ConvertTo-Json
    Invoke-RestMethod -Method Post `
      -Uri "https://sentry.io/api/hooks/release/builtin/...id.../...token.../" `
      -Body $requestBody `
      -ContentType "application/json"
  shell: pwsh

方案2:调用原生curl工具

如果坚持使用curl命令,需要指定GitHub Actions环境中git自带的原生curl完整路径,避免触发PowerShell的别名:

- name: Notify Sentry
  run: |
    $VERSION_NAME = "${{ github.ref_name }}"
    $REQUEST = "{`"version`": `"$VERSION_NAME`"}"
    echo $REQUEST
    # 调用Git自带的原生curl
    & "C:\Program Files\Git\mingw64\bin\curl.exe" -X POST `
      -H "Content-Type:application/json" `
      -d "$REQUEST" `
      "https://sentry.io/api/hooks/release/builtin/...id.../...token.../"
  shell: pwsh

内容的提问来源于stack exchange,提问作者BArtWell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:52:51