golang模拟客户端请求
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())
}