|
目录
最近在研究钉钉机器人,发现钉钉的第三方接口有时需要用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请求内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|