像golang中的请求一样发送curl

问题描述 投票:-3回答:3

我尝试在golang中发送这样的请求,但没有结果:

curl -s -i -H "Accept: application/json" "http://192.168.1.183:8080/json.htm?type=command&c=getauth&param=udevice&idx=9&nvalue=0&svalue=10;43;2"

怎么做?

我想发送数据做Domoticz家庭自动化系统。我得到的大雁:

{
   "status" : "ERR"
}

但应该是:

{
"status" : "OK",
"title" : "Update Device"
}

我试试这段代码:

    b := bytes.NewBufferString("type=command&c=getauth&param=udevice&idx=9&nvalue=0&svalue=10;43;2")
    res, _ := http.Post("http://192.168.1.183:8080/json.htm", "Accept: application/json", b)
json curl go
3个回答
3
投票

请注意,在您的初始curl命令中,您错过了-X POST参数。 那么generated code将是:

// Generated by curl-to-Go: https://mholt.github.io/curl-to-go

req, err := http.NewRequest("POST", "http://192.168.1.183:8080/json.htm?type=command&c=getauth&param=udevice&idx=9&nvalue=0&svalue=10;43;2", nil)
if err != nil {
    // handle err
}
req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    // handle err
}
defer resp.Body.Close()

2
投票

你的curl命令和Go代码几乎完全不相同。

  1. 你的Go发送一个POST请求,并卷曲一个GET请求。
  2. 你的curl命令设置一个Accept标头,你的Go代码没有。
  3. 你的Go命令发送一个正文,你的curl命令没有。
  4. 你的curl命令发送URL参数,你的Go代码没有。

你的代码做的卷曲相当于:

curl -s -i -X POST -H "Accept: application/json" "http://192.168.1.183:8080/json.htm" -d "type=command&c=getauth&param=udevice&idx=9&nvalue=0&svalue=10;43;2"

在Go中模拟curl命令的最简单方法是:

req, err := http.NewRequest("GET", "http://192.168.1.183:8080/json.htm?type=command&c=getauth&param=udevice&idx=9&nvalue=0&svalue=10;43;2", nil)
if err != nil {
    panic(err)
}
req.Header.Add("Accept", "application/json")
resp, err := http.DefaultClient.Do(req)

-2
投票

这对我有用:

    b := bytes.NewBufferString(" ")
    res, _ := http.Post("http://192.168.1.183:8080/json.htm?type=command&c=getauth&param=udevice&idx=9&nvalue=0&svalue=10;43;2", "Accept: application/json", b)

但我认为这不是最佳方式。

© www.soinside.com 2019 - 2024. All rights reserved.