package main import ( "bytes" "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "time" ) var u = "http://localhost:7896/form" // http请求的几种方式 func Get() { //1.方法一:通过http.get获取 res, err := http.Get(u + "?name=jee&age=12") if err != nil { fmt.Println("req", err.Error()) return } defer res.Body.Close() Read(res) // 方法二. 通过http.Client和http.NewRequest获取 // Post的body 可以用 url.Values 或 bytes.Buffer都可以 // bytes.Buffer使用方法: // a := new(bytes.Buffer) // json.NewEncoder(a).Encode(map[string]string{"name": "gee"}) cli := &http.Client{ Timeout: 30 * time.Second, } v := make(url.Values) v["name"] = []string{"jim"} v["age"] = []string{"12"} req, err := http.NewRequest("GET", u+"?"+v.Encode(), nil) if err != nil { fmt.Println("req", err.Error()) return } defer res.Body.Close() req.Header.Set("Content-Type", "application/json") res1, err := cli.Do(req) if err != nil { fmt.Println("err ", err.Error()) } Read(res1) } // 处理响应 func Read(res *http.Response) { // 注意:不能对res.Body重复读取,第二次将读不到信息 //1. 通过ioutil.ReadAll content, err := ioutil.ReadAll(res.Body) if err != nil { fmt.Println("-----res err-", err.Error()) return } fmt.Println(string(content)) // 2. 如果返回值是json,也可以这样读 //content2:=new(bytes.Buffer) content2 := map[string]interface{}{} err = json.NewDecoder(res.Body).Decode(&content2) if err != nil { fmt.Println("err", err.Error()) return } fmt.Println(content2) //3. 使用bytes.Buffer content3 := new(bytes.Buffer) io.Copy(content3, res.Body) fmt.Println(content3.String()) }