设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间20 现在时间20 缓存数据 和聪明人交流,和靠谱的人恋爱,和进取的人共事,和幽默的人随行。晚安!

和聪明人交流,和靠谱的人恋爱,和进取的人共事,和幽默的人随行。晚安!

查看: 1125|回复: 1

Golang发送Get和Post请求的实现

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
54
主题
38
精华
0
金钱
140
积分
92
注册时间
2023-7-30
最后登录
2025-6-1

发表于 2024-5-23 03:57:39 来自手机 | 显示全部楼层 |阅读模式
目录


  • Get请求
  • Post请求
最近在研究钉钉机器人,发现钉钉的第三方接口有时需要用Get或者Post请求访问,虽然说可以通过Apifox直接模拟发送请求,但是我还是想研究一个如何使用Golang来发送Get和Post请求。

Get请求
  1. package getUserid

  2. import (
  3.         "crypto/tls"
  4.         "encoding/json"
  5.         "io/ioutil"
  6.         "net/http"
  7.         "strings"
  8.         "time"
  9. )

  10. type User struct { //我们发送get请求需要传递一个参数mobile,我们封装一个对应的结构体
  11.         Mobile string `json:"mobile"`
  12. }
  13. type UserResopnseFail struct { //这个是如果访问失败的话,把失败信息保存在结构体创建的对象中
  14.         Errcode int    `json:"errcode"`
  15.         Errmsg  string `json:"errmsg"`
  16.         Result  struct {
  17.                 Userid string `json:"userid"`
  18.         } `json:"result"`
  19.         RequestId string `json:"request_id"`
  20. }
  21. type UserResponseSucc struct {// //这个是如果访问成功的话,把成功信息保存在结构体创建的对象中
  22.         Errcode int    `json:"errcode"`
  23.         Errmsg  string `json:"errmsg"`
  24.         Result  struct {
  25.                 Userid string `json:"userid"`
  26.         } `json:"result"`
  27.         RequestId string `json:"request_id"`
  28. }

  29. func GetUserID(number,access_token string) (userid string,err error) {
  30.         var client *http.Client //封装客户端
  31.         var request *http.Request //封装请求
  32.         var resp *http.Response //封装响应
  33.         var body []byte
  34.         urlForUserID := "https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token=" + access_token//拼接URL
  35.         client = &http.Client{Transport: &http.Transport{ //对客户端进行一些配置
  36.                 TLSClientConfig: &tls.Config{
  37.                         InsecureSkipVerify: true,
  38.                 },
  39.         }, Timeout: time.Duration(time.Second * 5)}
  40.         u := User{
  41.                 Mobile: number,
  42.         } //声明一个结构体对象,把我们传递的参数放进去
  43.         usermarshal, err := json.Marshal(&u) //把结构体序列化成byte[]类型
  44.         if err != nil {
  45.                 return
  46.         }
  47.        
  48.         reqBody := strings.NewReader(string(usermarshal))//此处再处理一步,才能放入下方请求中
  49.         request, err = http.NewRequest(http.MethodPost, urlForUserID, reqBody)
  50.         if err != nil {
  51.                 return
  52.         }
  53.         resp, err = client.Do(request)//发送请求
  54.         if err != nil {
  55.                 return
  56.         }
  57.         defer resp.Body.Close()
  58.         body, err = ioutil.ReadAll(resp.Body) //把请求到的body转化成byte[]
  59.         if err != nil {
  60.                 return
  61.         }
  62.         dataSucc := UserResponseSucc{} //声明一个响应对象
  63.         err = json.Unmarshal(body, &dataSucc)//把resq.Body反序列化成一个结构体对象
  64.         if err != nil {
  65.                 dateFail := UserResopnseFail{}
  66.                 err = json.Unmarshal(body, &dateFail)
  67.                 if err != nil {
  68.                         return
  69.                 }
  70.         }
  71.         return dataSucc.Result.Userid,err

  72.         return
  73. }
复制代码
以上即是Golang发送一个简单的Get请求。

Post请求
  1. func Post(需要的参数) (需要返回的数据) {
  2.         var client *http.Client
  3.         var request *http.Request
  4.         var resp *http.Response
  5.         var body []byte
  6.         URL := "xxx"
  7.         client = &http.Client{Transport: &http.Transport{ //对客户端进行一些配置
  8.                 TLSClientConfig: &tls.Config{
  9.                         InsecureSkipVerify: true,
  10.                 },
  11.         }, Timeout: time.Duration(time.Second * 5)}
  12. //此处是post请求的请求题,我们先初始化一个对象
  13.         b := Body{
  14.                 xxx :xxx,
  15.         }
  16. //然后把结构体对象序列化一下
  17.         bodymarshal, err := json.Marshal(&b)
  18.         if err != nil {
  19.                 return
  20.         }
  21. //再处理一下
  22.         reqBody := strings.NewReader(string(bodymarshal))
  23. //然后就可以放入具体的request中的
  24.         request, err = http.NewRequest(http.MethodPost, URL, reqBody)
  25.         if err != nil {
  26.                 return
  27.         }
  28.         resp, err = client.Do(request)
  29.         if err != nil {
  30.                 return
  31.         }
  32.         defer resp.Body.Close()
  33.         body, err = ioutil.ReadAll(resp.Body) //把请求到的body转化成byte[]
  34.         if err != nil {
  35.                 return
  36.         }
  37. //初始化结构体对象
  38.         r := Response{}
  39. //把请求到的结构反序列化到专门接受返回值的对象上面
  40.         err = json.Unmarshal(body, &r)
  41.         if err != nil {
  42.                 return
  43.         }
  44.         // 此处举行具体的逻辑判断,然后返回即可
  45.         return
  46. }
  47. //此处是发送Post请求的请求体(我们根据具体的接口文档定义即可)
  48. type Body struct {
  49.         xxx   string `json:"xxx"`
  50. }
  51. //此处是请求的返回结果(我们根据具体的接口文档定义即可)
  52. type Response struct {
  53.         Errcode int `json:"errcode"`
  54.         Result Result `json:"result"`
  55. }
复制代码
到此这篇关于Golang发送Get和Post请求的实现的文章就介绍到这了,更多相关Golang发送Get和Post请求内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
23
积分
26
注册时间
2022-12-25
最后登录
2022-12-25

发表于 2025-12-11 22:20:13 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表