如何使用Golang发送Get和Post请求
更新时间:2023年06月30日 15:50:13 作者:大杯无糖
这篇文章主要给大家介绍了关于如何使用Golang发送Get和Post请求的相关资料,Go语言(Golang)的标准库提供了处理HTTP请求的功能,这使得将Go用于web应用程序变得非常容易,需要的朋友可以参考下
前言
最近在研究钉钉机器人,发现钉钉的第三方接口有时需要用Get或者Post请求访问,虽然说可以通过Apifox直接模拟发送请求,但是我还是想研究一个如何使用Golang来发送Get和Post请求。
Get请求
package getUserid import ( "crypto/tls" "encoding/json" "io/ioutil" "net/http" "strings" "time" ) type User struct { //我们发送get请求需要传递一个参数mobile,我们封装一个对应的结构体 Mobile string `json:"mobile"` } type UserResopnseFail struct { //这个是如果访问失败的话,把失败信息保存在结构体创建的对象中 Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` Result struct { Userid string `json:"userid"` } `json:"result"` RequestId string `json:"request_id"` } type UserResponseSucc struct {// //这个是如果访问成功的话,把成功信息保存在结构体创建的对象中 Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` Result struct { Userid string `json:"userid"` } `json:"result"` RequestId string `json:"request_id"` } func GetUserID(number,access_token string) (userid string,err error) { var client *http.Client //封装客户端 var request *http.Request //封装请求 var resp *http.Response //封装响应 var body []byte urlForUserID := "https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token=" + access_token//拼接URL client = &http.Client{Transport: &http.Transport{ //对客户端进行一些配置 TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, }, }, Timeout: time.Duration(time.Second * 5)} u := User{ Mobile: number, } //声明一个结构体对象,把我们传递的参数放进去 usermarshal, err := json.Marshal(&u) //把结构体序列化成byte[]类型 if err != nil { return } reqBody := strings.NewReader(string(usermarshal))//此处再处理一步,才能放入下方请求中 request, err = http.NewRequest(http.MethodPost, urlForUserID, reqBody) if err != nil { return } resp, err = client.Do(request)//发送请求 if err != nil { return } defer resp.Body.Close() body, err = ioutil.ReadAll(resp.Body) //把请求到的body转化成byte[] if err != nil { return } dataSucc := UserResponseSucc{} //声明一个响应对象 err = json.Unmarshal(body, &dataSucc)//把resq.Body反序列化成一个结构体对象 if err != nil { dateFail := UserResopnseFail{} err = json.Unmarshal(body, &dateFail) if err != nil { return } } return dataSucc.Result.Userid,err return }
以上即是Golang发送一个简单的Get请求。
Post请求
func Post(需要的参数) (需要返回的数据) { var client *http.Client var request *http.Request var resp *http.Response var body []byte URL := "xxx" client = &http.Client{Transport: &http.Transport{ //对客户端进行一些配置 TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, }, }, Timeout: time.Duration(time.Second * 5)} //此处是post请求的请求题,我们先初始化一个对象 b := Body{ xxx :xxx, } //然后把结构体对象序列化一下 bodymarshal, err := json.Marshal(&b) if err != nil { return } //再处理一下 reqBody := strings.NewReader(string(bodymarshal)) //然后就可以放入具体的request中的 request, err = http.NewRequest(http.MethodPost, URL, reqBody) if err != nil { return } resp, err = client.Do(request) if err != nil { return } defer resp.Body.Close() body, err = ioutil.ReadAll(resp.Body) //把请求到的body转化成byte[] if err != nil { return } //初始化结构体对象 r := Response{} //把请求到的结构反序列化到专门接受返回值的对象上面 err = json.Unmarshal(body, &r) if err != nil { return } // 此处举行具体的逻辑判断,然后返回即可 return } //此处是发送Post请求的请求体(我们根据具体的接口文档定义即可) type Body struct { xxx string `json:"xxx"` } //此处是请求的返回结果(我们根据具体的接口文档定义即可) type Response struct { Errcode int `json:"errcode"` Result Result `json:"result"` }
总结
到此这篇关于如何使用Golang发送Get和Post请求的文章就介绍到这了,更多相关Golang发送Get和Post请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
在Golang中使用http.FileServer返回静态文件的操作
这篇文章主要介绍了在Golang中使用http.FileServer返回静态文件的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-12-12Golang源码分析之golang/sync之singleflight
golang/sync库拓展了官方自带的sync库,提供了errgroup、semaphore、singleflight及syncmap四个包,本次先分析第一个包errgroup的源代码,下面这篇文章主要给大家介绍了关于Golang源码分析之golang/sync之singleflight的相关资料,需要的朋友可以参考下2022-11-11
最新评论