文章标题 原创 翻译 转载 文章内容 get和post请求使用比较频繁,这里只考虑json格式,做一下简单封装。 # get请求 ``` func HttpGetJson(url string, resp interface{}) error { result, err := http.Get(url) if err == nil { defer result.Body.Close() return json.NewDecoder(result.Body).Decode(resp) } return err } ``` 用法举例: ``` jsonLogin := GithubLoginResponse{} if err := util.HttpGetJson("https://api.github.com/user?access_token="+token, &jsonLogin); err != nil { errmsg = fmt.Sprintf("%v", err) break } ``` # post请求 相对较复杂些 ``` func HttpPostJson(url string, data map[string]interface{}, resp interface{}) error { b, err := json.Marshal(data) if err != nil { return err } reader := bytes.NewReader(b) request, err := http.NewRequest("POST", url, reader) if err != nil { return err } request.Header.Set("Accept", "application/json;charset=UTF-8") request.Header.Set("Content-Type", "application/json;charset=UTF-8") client := http.Client{} response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() return json.NewDecoder(response.Body).Decode(resp) } ``` 用法举例: ``` payload := make(map[string]interface{}) payload["client_id"] = "531ad8e4517595748d97" payload["client_secret"] = "bf123fc9fe25a30e3e33d7a07daf825b73e07dc6" payload["code"] = code payload["state"] = state var jsonAccessToken AccessTokenResponse if err := util.HttpPostJson("https://github.com/login/oauth/access_token", payload, &jsonAccessToken); err != nil { errmsg = fmt.Sprintf("%v", err) break } ``` > 注意上面的resp interface{}是根据json应答结果定义的struct,可以只定义要使用的字段,如果不知道怎么定义可以参考:[https://www.ningto.com/post/5cd83f0be65d054c17b37f90](https://www.ningto.com/post/5cd83f0be65d054c17b37f90) 文章类别 Python Mobile Android Java Shell Life Database Bug Windows IOS Tools Boost Node.js Mac Product Tips C/C++ Golang Javascript React Qt MQ MongoDB Design Web Linux LLM ChatGPT RAG AI 提交