Go中http請求通用方式

在Go項目開發的過程當中http的請求方式挺多,不想去記憶,每次直接使用最基本的方式。json

// 複雜的請求參數
func HttpPost(url string) string {
	type Server struct {
		ServerName string
		ServerIp   string
		Age        int
	}

	type ServerSlice struct {
		Server    []Server
		ServersID string
	}
	//post 第三個參數是io.reader interface
	//strings.NewReader byte.NewReader bytes.NewBuffer 實現了read 方法
	s := ServerSlice{
		ServersID: "tearm",
		Server:    []Server{{"beijing", "127.0.0.1", 20}, {"shanghai", "127.0.0.1", 22}},
	}
	b, _ := json.Marshal(s) // 這裏的s既能夠是結構體,也能夠是map[][]類型

	client := &http.Client{}
	// 若是存在參數,只需序列化成字符串,並轉化爲io.reader類型,傳入第三個參數
	req, err := http.NewRequest("POST", url, strings.NewReader("heel="+string(b)))
	if err != nil {
		panic(err)
	}
	// 設置請求數據類型:"application/json","application/x-www-form-urlencoded"
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	resp, err := client.Do(req)

	if err != nil {
		// handle error
	}
	defer resp.Body.Close()
	body, _ := ioutil.ReadAll(resp.Body)
	return string(body)
}

func HttpGet(url string) string {
	//生成client 參數爲默認
	client := &http.Client{}

	//第三個參數是io.reader interface
	//strings.NewReader byte.NewReader bytes.NewBuffer 實現了read 方法
	// 若是存在參數,只需序列化成字符串,並轉化爲io.reader類型,傳入第三個參數
	// 舉個例子:?name=pj&age=18 則傳入參數能夠爲: strings.NewReader("name=pj&age=18")
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		// handle err
	}
	// 設置請求頭
	// req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	//處理返回結果
	response, _ := client.Do(req)
	body, err := ioutil.ReadAll(response.Body)
	if err != nil {
		// handle err
	}
	return string(body)
}
複製代碼
相關文章
相關標籤/搜索