使用exec.Command调用curl报错:URL格式非法或缺失
问题原因与解决方法
你的问题出在exec.Command传递curl参数时带了前导空格,终端里的空格是用来分隔参数的,但Go里每个参数必须是独立的、不带多余前导空格的字符串,否则curl会把带空格的参数当成无效选项,导致URL解析错误。
错误参数的问题点
看你原来的代码:
cmd := exec.Command("curl", " -F", " tarball=@"+tgzpath, " --request", " POST", " -H", fmt.Sprintf("Authorization: Bearer %s", Token )," ","http://localhost:1880/nodes")
这里的" -F"、" --request"、" POST"、" -H"都带了前导空格,还有那个多余的空字符串参数"",这些都会被curl错误解析。
修正后的代码
把所有参数的前导空格去掉,同时删除空参数:
cmd := exec.Command("curl", "-F", "tarball=@"+tgzpath, "--request", "POST", "-H", fmt.Sprintf("Authorization: Bearer %s", Token), "http://localhost:1880/nodes")
为什么终端里能正常运行?
终端执行命令时,shell会自动把空格作为参数分隔符,将-F、tarball=@/tgzpath等拆分成独立的参数传递给curl;但Go的exec.Command不会做这个拆分,你传的每个字符串会原封不动作为curl的一个参数,带前导空格的参数会被curl识别成无效选项,自然就报错了。
内容的提问来源于stack exchange,提问作者user21804545
相关产品推荐
相关产品推荐

