写了一下go发送http请求常用的几种方法
package main import ( "net/http" "io/ioutil" "fmt" "strings" "net/url" "bytes" "encoding/json" ) func main() { urls := "http://www.baidu.com/" var data = map[string]interface{}{} res := 1 var resp *http.Response var err error //-------------------------发起请求------------------------------------ switch res{ case 1: // get请求 resp, err = http.Get(urls) case 2: // post发送json datas, _ := json.Marshal(data) resp, err = http.Post(urls, "application/json", bytes.NewBuffer(datas)) case 3: // post发送from表单 datas := make(url.Values) for key, value := range data { datas[string(key)] = []string{value.(string)} } resp, err = http.PostForm(urls, datas) case 4: // 创建请求设置参数 datas := url.Values{ "name": {"fei"}, } req, err := http.NewRequest("POST",urls, strings.NewReader(datas.Encode())) if err != nil { // handle error } req.Header.Add("Content-Type", "application/x-www-form-urlencoded") req.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36") client := &http.Client{} resp, err = client.Do(req) } //-------------------------发起请求成功------------------------------------ if err != nil { fmt.Println(err.Error()) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err.Error()) } fmt.Println(string(body)) //解析返回body的话直接用断言就可以 }