go语言进行http请求和处理http响应的几种方式

发送http请求的方式

方法一:使用http.Get、http.Post
func Get() {
	u := "http://localhost:8080"
	v := make(url.Values)
	v["name"] = []string{"jim"}
	v["age"] = []string{"12"}
	
	// v.Encode = "name=jee&age=12"
	res, err := http.Get(u + "?" + v.Encode())
	if err != nil {
		fmt.Println("req", err.Error())
		return
	}
	
	defer res.Body.Close()
}
方法二:通过http.Client和http.NewRequest
func Post(){
	cli := &http.Client{
		Timeout: 30 * time.Second,
	}
	
	// Post的body是一个io.Reader,url.Values、bytes.Buffer等都实现了io.Reader
	// bytes.Buffer使用方法:
	// a := new(bytes.Buffer)
	// json.NewEncoder(a).Encode(map[string]string{"name": "gee"})
	body := strings.NewReader(`{'name':'joe','age':12}`)
	req, err := http.NewRequest("GET", u+"?"+v.Encode(), body)
	if err != nil {
		fmt.Println("New request error:", err.Error())
		return
	}
	req.Header.Set("Content-Type", "application/json")

	resp, err := cli.Do(req)
	if err != nil {
		fmt.Println("err ", err.Error())
	}
	
	defer resp.Body.Close()
}

处理http响应的方式

方法一:使用ioutil.ReadAll
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))
}
方法二:如果返回值是json,也可以这样读
func Read(res *http.Response) {
	content := map[string]interface{}{}
	err = json.NewDecoder(res.Body).Decode(&content)
	if err != nil {
		fmt.Println("err", err.Error())
		return
	}
	fmt.Println(content)
方法三:使用bytes.Buffer
func Read(res *http.Response) {
	content := new(bytes.Buffer)
	io.Copy(content, res.Body)
	fmt.Println(content.String())
}

你可能感兴趣的:(golang)