📅  最后修改于: 2023-12-03 15:24:10.685000             🧑  作者: Mango
在 Golang 中发送应用程序 x-www-form-urlencoded 请求,可以通过 net/http
包提供的 PostForm
方法进行实现。
package main
import (
"net/http"
"net/url"
)
func main() {
form := url.Values{}
form.Add("key1", "value1")
form.Add("key2", "value2")
req, _ := http.NewRequest("POST", "http://example.com/api", bytes.NewBufferString(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
这个方法中,我们首先创建了一个 url.Values
对象,用于存储请求参数。然后,我们创建了一个 http.Request
对象,并指定了请求方法、URL 和请求体。在请求体中,我们将 url.Values
对象通过 Encode()
方法编码成一个字符串,并传递给 bytes.NewBufferString()
方法创建一个 bytes.Buffer
对象,作为请求体。我们还设置了请求头的 Content-Type
为 application/x-www-form-urlencoded
。
接下来,我们使用 http.Client
对象的 Do()
方法发送请求,并获取响应。如果发生错误,我们使用 panic()
抛出异常。最后,我们使用 ioutil
包的 ReadAll()
方法读取响应体,将其转换成字符串并打印。
package main
import (
"net/http"
"net/url"
)
func main() {
form := url.Values{}
form.Add("key1", "value1")
form.Add("key2", "value2")
resp, err := http.PostForm("http://example.com/api", form)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
这个方法中,我们使用 http.PostForm()
方法发送请求,该方法会自动处理请求体的编码和请求头的设置。我们只需要传递请求 URL 和 url.Values
对象即可。如果发生错误,我们使用 panic()
抛出异常。最后,我们使用 ioutil
包的 ReadAll()
方法读取响应体,将其转换成字符串并打印。