gpt4 book ai didi

json - exec.Command 使用 JSON 负载转义变量

转载 作者:数据小太阳 更新时间:2023-10-29 03:35:25 24 4
gpt4 key购买 nike

预先感谢您,因为我已经在这上面花了 2 天时间。这是一个有效的 curl 命令。

curl -ku login:pass -X POST -H 'Content-Type: application/json'-d'{"type":"page","title":"Testpage","space":{"key":"ITDept"},"body":{"storage":{"value":"<p>Blank Page.</p>","representation":"storage"}}}' https://confluence/rest/api/content

我需要使用 exec.Command 来执行它。

考虑到现在在 Go 中,我已经尝试过转义和各种其他方法来让它工作。问题很可能是这个荒谬的 JSON 字符串是必需的。我现在将 JSON 字符串保存到一个 var 中以尝试这种方式。

jsonPayload := '{"type":"page","title":"Testpage","space":{"key":"ITDept"},"body":{"storage":{"value":"<p>Blank Page.</p>","representation":"storage"}}}'

execCmd := "bash", "-c", "curl -ku login:pass -X POST -H 'Content-Type: application/json' -d" jsonPayload "https://confluence/rest/api/content"

所以 jsonPayload 是 -d 的参数。我已经使用 Marshal json/encoding 和 net/http 包进行了尝试,它通过了,但是关于 stdlib 如何发送它的一些事情导致 API 声明它是错误的格式。

我也尝试过这个,并且从 println 复制出来的 curl 有效,但是当实际在 golang 中运行时,它因格式不正确而失败。

    env := os.Environ()
curlCmd, err := exec.LookPath("curl")
if err != nil {
fmt.Println("Path not found to binary!")
panic(err)
}
args := []string{"curl", "-ku", "login:pass", "-X", "POST", "-H", "'Content-Type: application/json'", "-d", payloadJson, "https://confluence/rest/api/content"}

execErr := syscall.Exec(curlcmd, args, env)
if execErr != nil {
panic(execErr)
}
fmt.Println(curlCmd)

当打印最后一行的 curlCmd 时,可以将其复制并粘贴到终端中,并且可以正常工作,但是在通过 golang 时,它带有不受支持的格式。任何帮助将不胜感激。

最佳答案

试试这个:

payload := `{"type":"page","title":"Testpage","space":{"key":"ITDept"},"body":{"storage":{"value":"<p>Blank Page.</p>","representation":"storage"}}}`
cmd := exec.Command("curl", "-ku", "login:pass", "-X", "POST", "-H", "Content-Type: application/json", "-d", payload, "http://localhost:8080/confluence/rest/api/content")
p, err := cmd.CombinedOutput()
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", p)

问题中代码的重要变化:

  • 直接运行命令而不是使用 bash。
  • 在 URL 中指定主机名。
  • 正确引用字符串。

顺便说一句,您还可以解释字符串文字:

payload := "{\"type\":\"page\",\"title\":\"Testpage\",\"space\":{\"key\":\"ITDept\"},\"body\":{\"storage\":{\"value\":\"<p>Blank Page.</p>\",\"representation\":\"storage\"}}}"

关于json - exec.Command 使用 JSON 负载转义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41475753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com