go对get、post请求封装

  • 一、参考
    • 1、Get请求封装
    • 2、Post请求封装
  • 二、按需调整
    • 1、GET请求
    • 2、POST请求
  • 三、其他
  • 四、json.Marshal()方法 特殊字符&被转义

一、参考

  • 参考地址:go对get、post请求封装

1、Get请求封装

//Get http get method
func Get(url string, params map[string]string, headers map[string]string) (*http.Response, error) {
     
	//new request
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
     
		log.Println(err)
		return nil, errors.New("new request is fail ")
	}
	//add params
	q := req.URL.Query()
	if params != nil {
     
		for key, val := range params {
     
			q.Add(key, val)
		}
		req.URL.RawQuery = q.Encode()
	}
	//add headers
	if headers != nil {
     
		for key, val := range headers {
     
			req.Header.Add(key, val)
		}
	}
	//http client
	client := &http.Client{
     }
	log.Printf("Go GET URL : %s \n", req.URL.String())
	return client.Do(req)
}

2、Post请求封装

//Post http post method
func Post(url string, body map[string]string, params map[string]string, headers map[string]string) (*http.Response, error) {
     
	//add post body
	var bodyJson []byte
	var req *http.Request
	if body != nil {
     
		var err error
		bodyJson, err = json.Marshal(body)
		if err != nil {
     
			log.Println(err)
			return nil, errors.New("http post body to json failed")
		}
	}
	req, err := http.NewRequest("POST", url, bytes.NewBuffer(bodyJson))
	if err != nil {
     
		log.Println(err)
		return nil, errors.New("new request is fail: %v \n")
	}
	req.Header.Set("Content-type", "application/json")
	//add params
	q := req.URL.Query()
	if params != nil {
     
		for key, val := range params {
     
			q.Add(key, val)
		}
		req.URL.RawQuery = q.Encode()
	}
	//add headers
	if headers != nil {
     
		for key, val := range headers {
     
			req.Header.Add(key, val)
		}
	}
	//http client
	client := &http.Client{
     }
	log.Printf("Go POST URL : %s \n", req.URL.String())
	return client.Do(req)
}

二、按需调整

  • 我不需要所有的 response 内容,我只要返回的 res.Body 数据

1、GET请求

//Get http get method
func Get(url string, params map[string]string, headers map[string]string) ([]byte, error) {
     
	//new request
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
     
		log.Println(err)
		return nil, errors.New("new request is fail ")
	}
	//add params
	q := req.URL.Query()
	if params != nil {
     
		for key, val := range params {
     
			q.Add(key, val)
		}
		req.URL.RawQuery = q.Encode()
	}
	//add headers
	if headers != nil {
     
		for key, val := range headers {
     
			req.Header.Add(key, val)
		}
	}
	//http client
	client := &http.Client{
     }
	log.Printf("Go GET URL : %s \n", req.URL.String())

	//发送请求
	res, err := client.Do(req)
	if err != nil {
     
		return nil, err
	}
	defer res.Body.Close() //一定要关闭res.Body
	//读取body
	resBody, err := ioutil.ReadAll(res.Body) //把  body 内容读入字符串 s
	if err != nil {
     
		return nil, err
	}

	return resBody, nil
}

2、POST请求

//Post http post method
func Post(url string, body map[string]interface{
     }, params map[string]string, headers map[string]string) ([]byte, error) {
     
	//add post body
	var bodyJson []byte
	var req *http.Request
	if body != nil {
     
		var err error
		bodyJson, err = json.Marshal(body)
		if err != nil {
     
			log.Println(err)
			return nil, errors.New("http post body to json failed")
		}
	}
	req, err := http.NewRequest("POST", url, bytes.NewBuffer(bodyJson))
	if err != nil {
     
		log.Println(err)
		return nil, errors.New("new request is fail: %v \n")
	}
	req.Header.Set("Content-type", "application/json")
	//add params
	q := req.URL.Query()
	if params != nil {
     
		for key, val := range params {
     
			q.Add(key, val)
		}
		req.URL.RawQuery = q.Encode()
	}
	//add headers
	if headers != nil {
     
		for key, val := range headers {
     
			req.Header.Add(key, val)
		}
	}
	//http client
	client := &http.Client{
     }
	log.Printf("Go POST URL : %s \n", req.URL.String())

	//发送请求
	res, err := client.Do(req)
	if err != nil {
     
		return nil, err
	}
	defer res.Body.Close() //一定要关闭res.Body
	//读取body
	resBody, err := ioutil.ReadAll(res.Body) //把  body 内容读入字符串 s
	if err != nil {
     
		return nil, err
	}

	return resBody, nil
}

三、其他

  • 因为还在学习之中,如果内容有误,请宽容指出,不胜感激~

四、json.Marshal()方法 特殊字符&被转义

  • 如果希望json.Marshal() 特殊字符&不被转义为\u0026:请参考 golang 微信小程序获取二维码scene参数报错 invalid scene rid: f05f96ab-5382f139-14b13d2f

你可能感兴趣的:(#,Go,go对get,post请求封装,go封装get,post请求,go封装get,post)