Go发送http请求
Get 请求
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("http://127.0.0.1:5000/api/test")
if err != nil {
panic(err)
}
defer resp.Body.Close()
s, _ := ioutil.ReadAll(resp.Body)
fmt.Println(resp.StatusCode)
fmt.Println(string(s))
}
可以发现上面的例子中还需要对响应体进行读取,如果每条请求都需要如此操作的话,代码逻辑将会十分臃肿,一般都需要自行封装。而事实上大部分的编程语言的 http 请求库(包)都不会过度封装,一般都需要用户自行封装或使用第三方请求库。
当然这里肯定毫不犹豫的选择第三方库,后文会推荐几个,以及一些使用代码,这里还需要使用原生 http 库发送 Post 请求
Post 请求
发送 querystring
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func main() {
payload := strings.NewReader("foo=1&bar=2")
resp, err := http.Post("http://127.0.0.1:5000/api/test", "application/x-www-form-urlencoded", payload)
if err != nil {
panic(err)
}
defer resp.Body.Close()
s, _ := ioutil.ReadAll(resp.Body)
fmt.Println(resp.StatusCode)
fmt.Println(string(s))
}
此外还可以使用 http.PostForm(省略读取响应代码)
import (
"net/http"
"net/url"
)
func main() {
payload := url.Values{"foo": {"1"}, "bar": {"2"}}
resp, err := http.PostForm("http://127.0.0.1:5000/api/test", payload)
}