在我的用例中,我需要将数据发布到url,但是数据本身是一个查询字符串。 示例:
curl -POST -d "username=abc&rememberme=on&authtype=intenal" "https..somemdpoint"
我所拥有的是一种可以接受3个值的方法
function makePostRequest(username string, rememberme string, authtype string, endpoint string) {
// post a curl request.
}
如果要为它提供参数,我会努力寻找任何能够返回查询字符串的库。
我尝试这样做:
q := req.URL.Query()
q.Add("api_key", "key_from_environment_or_flag")
q.Add("another_thing", "foobar")
fmt.Print(q)
但是意识到它实际上返回的是Values,这是一个映射,所以没有好处。
golang中是否存在任何创建queryString的方法?
答案 0 :(得分:5)
您几乎明白了。调用Values.Encode()
,以URL编码形式对地图进行编码。
fmt.Print(q.Encode()) // another_thing=foobar&api_key=key_from_environment_or_flag
直接创建地图,而不使用req.URL.Query()
返回一个空地图:
values := url.Values{}
values.Add("api_key", "key_from_environment_or_flag")
values.Add("another_thing", "foobar")
query := values.Encode()
使用strings.NewReader(query)
获取POST请求正文的io.Reader
。