提交golanghttp负载中的变量.新请求



我正在学习Golang,所以请原谅这可能是一个基本问题。我已经搜索了几个小时,寻找如何从我的golang应用程序在JSON格式的API POST中发送变量数据的线索,但还没有找到线索或解决方案。我知道答案将是我缺乏语法知识。

所以问题出在我试图POST的"lastcontact"字段上。我想使用包含当前日期时间的"dt"变量。

package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
"time"
)
func main() {
dt := time.Now()
url := "https://fakeapi.io/API/apiActions/update/"
method := "POST"
payload := strings.NewReader(`{
"name" : "Dumpty",
"saveconfig" : "true",
"lastcontact" : {dt}
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("api-key", "gjhgjhgjhg")
req.Header.Add("api-secret", "jhgjhgjhg")
req.Header.Add("Content-Type", "application/json; charset=UTF-8")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}

如果事先知道字段,则可以使用结构来存储响应类型。如果不这样做,可以使用map[string]interface{}来存储任意数据。

然后使用json.Marshal将其转换为格式正确的JSON响应。

type myStruct struct {
Name        string    `json:"name"`
SaveConfig  string    `json:"saveconfig"`
LastContact time.Time `json:"lastcontact"`
}
dt := time.Now()
myData := myStruct{
Name:        "Dumpty",
SaveConfig:  "true",
LastContact: dt,
}
myBytes, err := json.Marshal(myData)
// bytes.NewBuffer returns *bytes.Buffer
// which implements the io.Reader interface
// that you need for your http.NewRequest call
payload := bytes.NewBuffer(myBytes)

完整的操场示例https://play.golang.org/p/Mc9UXT32Wi1

最新更新