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

使用os/exec调用curl从GitLab私有仓库拉取文件返回404

问题原因

你遇到的404问题根源在URL的转义字符处理上:

  • 在zsh终端里,\?和\=是用来告诉shell不要把?和=当成shell元字符解析,shell会自动去掉反斜杠,把正确的raw?ref=master传给curl。
  • 但Go的exec.Command是直接将参数传递给curl,不会处理shell的转义字符,所以你的URL里的\?和\=会被curl当成URL的一部分,实际请求的是raw\?ref\=master,这显然不是GitLab API的正确路径,因此返回404。
修复代码

把URL里的反斜杠去掉,直接传递原始的URL参数即可:

func Test_curl(t *testing.T) {
    cmd := exec.Command(
        `curl`,
        `-H`, `PRIVATE-TOKEN:token`,
        `https://gitlab.some.com/api/v4/projects/23/repository/files/.gitignore/raw?ref=master`,
    )
    t.Log(cmd.String())

    var out bytes.Buffer
    cmd.Stdout = &out

    err := cmd.Run()
    if err != nil {
        t.Fatal(err)
    }
    t.Log(out.String())
}
验证逻辑

修改后,exec.Command传递给curl的URL是正确的raw?ref=master,和终端里shell处理后的参数完全一致,就能正常请求到GitLab仓库的文件内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:15:34