curl从GitHub私有库下载zip正常,Go代码执行该命令返回404?
问题分析与解决:Go执行curl命令下载GitHub私有文件返回"Not Found"
你遇到的问题核心是exec.Command的参数传递格式错误,具体问题和修复方法如下:
错误原因
在shell中执行curl时,单引号'是用来避免shell解析空格等特殊字符的语法,但在Go的exec.Command中,每个参数都是独立的字符串,不需要额外加单引号。你现在给-H的参数值套了单引号,导致curl实际发送的请求头是:
'Authorization: token <Token>' 'Accept: application/vnd.github.v3.raw'
这些包含单引号的请求头是无效的,GitHub无法识别你的授权信息,自然返回"Not Found"的错误。
另外你还漏掉了原curl命令中的-J参数,这个参数用于让curl根据响应头的Content-Disposition自动设置文件名,建议补上。
修正后的Go代码
cmd := exec.Command("curl", "-H", "Authorization: token <Token>", "-H", "Accept: application/vnd.github.v3.raw", "-J", "-L", "-O", "https://api.github.com/repos/<owner>/<repo-name>/contents/abc.zip") err := cmd.Run() // 建议用Run()而非Start(),能直接捕获执行错误 if err != nil { // 处理错误,比如打印日志或返回错误信息 }
额外提醒
- 用
cmd.Run()替代cmd.Start(),后者只会启动命令但不等待执行完成,也不会返回执行错误,不利于排查问题。 - 敏感信息(如个人访问令牌)建议通过环境变量传递,不要硬编码在代码里。
内容的提问来源于stack exchange,提问作者user2306856
相关产品推荐
相关产品推荐

