设置POST请求表单数据变量

时间:2017-10-04 09:20:46

标签: string go http-post url-encoding

A := 123
B := "xyz"
b := bytes.NewBufferString("a=" + A + "&b=" + B)
r.Body = ioutil.NopCloser(b)

在发送a请求之前,是否有更好的方法来设置变量bPOST

1 个答案:

答案 0 :(得分:3)

表单键和值中的某些字符需要转义,例如&=。因此,为了避免这些错误,最好使用url.Values类型。

它将string个键映射到string值列表。因此,如果您的值不是string,则必须先将其转换为string。最简单的方法是使用fmt.Sprint()strconv.Itoa()(有关更多选项,请参阅Golang: format a string without printing?)。

vs := url.Values{}
vs.Set("a", fmt.Sprint(123))
vs.Set("b", "xyz")
vs.Set("tricky", "= & =")
b := bytes.NewBufferString(vs.Encode())

url.Values知道如何正确转义键和值。以上vs.Encode()例如输出(在Go Playground上尝试):

a=123&b=xyz&tricky=%3D+%26+%3D

注意:

由于url.Values只是一张地图(其中map[string][]string为其基础类型),您还可以使用简单的composite literal来创建和填充它:

vs := url.Values{
    "a":      {strconv.Itoa(123)},
    "b":      {"xyz"},
    "tricky": {"= & ="},
}
b := bytes.NewBufferString(vs.Encode())

Go Playground上尝试此变体。