http.Post和http.PostForm区别及如何使用
时间: 2024-09-17 15:08:46 浏览: 59
在Go语言标准库中,`net/http`包提供了`Post`和`PostForm`两个函数用于发送HTTP POST请求。它们的主要区别在于数据格式和携带的参数组织方式。
1. `http.Post(url string, req *http.Request) (*http.Response, error)`:
这个函数接受一个URL和一个已经构建好的`*http.Request`结构体作为参数。如果你需要自定义请求头、设置超时、添加cookies等复杂设置,通常会选择这种方式。你需要手动构建`http.Request`,包括设置`Content-Type`(通常是`application/x-www-form-urlencoded`或`multipart/form-data`),然后填充POST数据,比如:
```go
body := url.Values{"key": {"value"}}
request, err := http.NewRequest("POST", "https://example.com/api", bytes.NewBuffer(body.Encode()))
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
response, err := client.Do(request)
```
2. `http.PostForm(url string, data url.Values) (*http.Response, error)`:
这是一个便捷的方法,适合简单的情况,尤其是当你只需要发送键值对形式的数据(如表单提交),并且不需要额外的请求头部定制。它内部会自动设置`Content-Type: application/x-www-form-urlencoded`。例如:
```go
data := url.Values{
"username": {"user"},
"password": {"pass"},
}
response, err := http.PostForm("https://example.com/login", data)
```
阅读全文