我看到有一种简单的方法来发送带有表单值的帖子,但是我可以使用的函数与PostForm基本相同但是对于GET请求吗?
- 编辑 -
基本上,我想构建网址:https://uri.com?key=value 但不使用字符串连接与未转义的键和值。
答案 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
只是NewRequest
和Do
的简单易用包装。正如您希望自己使用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)