在Go中使用表单值发出HTTP GET

时间:2018-05-11 00:21:14

标签: http go

我看到有一种简单的方法来发送带有表单值的帖子,但是我可以使用的函数与PostForm基本相同但是对于GET请求吗?

- 编辑 -

基本上,我想构建网址:https://uri.com?key=value 但不使用字符串连接与未转义的键和值。

2 个答案:

答案 0 :(得分:1)

使用Values.Encode对查询参数进行编码。连接基本URL和查询参数以获取实际URL。

resp, err := http.Get(fmt.Sprintf("%s?%s", baseURL, data.Encode()))

答案 1 :(得分:-1)

正如in this question所述,您可能实际上并不想这样做。大多数服务器都不会对GET请求中的表单正文执行任何有用的操作 - 大多数服务器只会将其视为查询字符串中发送的相同参数的同义词,在这种情况下,您应该只是放置它们首先放在url.URL对象的查询字符串中。

但是,如果你有充分的理由这样做,你可以。正如您链接的文档所解释的那样,PostForm只是NewRequestDo的简单易用包装。正如您希望自己使用NewRequest一样,如果您想添加自定义标题,则可以使用它来附加正文。

如果你看一下the source to PostForm,那就非常简单了:

return c.Post(url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))

基本上,而不是:

resp, err := client.PostForm(url, data)

...你这样做:

body := strings.NewReader(data.Encode())
req, err := http.NewRequest("GET", url, body)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)