广告位联系
返回顶部
分享到

Golang发送Get和Post请求的实现

Golang 来源:互联网 作者:佚名 发布时间:2024-05-22 21:43:25 人浏览
摘要

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

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

Get请求

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

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请求

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

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"`

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Golang使用embed引入静态文件的代码
    Go 语言从 1.16 版本开始引入了一个新的标准库embed,可以在二进制文件中引入静态文件 指令:/go:embed 通过一个简单的小实例,来演示将静态
  • Golang发送Get和Post请求的实现
    最近在研究钉钉机器人,发现钉钉的第三方接口有时需要用Get或者Post请求访问,虽然说可以通过Apifox直接模拟发送请求,但是我还是想研究
  • Go实现数据脱敏的方案设计
    在一些常见的业务场景中可能涉及到用户的手机号,银行卡号等敏感数据,对于这部分的数据经常需要进行数据脱敏处理,就是将此部分数
  • golang testing使用示例介绍
    testing包服务于自动化测试 基本测试 Table Drvien Test 基于表的测试通过表形式进行测试每种情况的输入和期望输出,从而测试程序的正确性
  • Golang流程控制语句的具体使用

    Golang流程控制语句的具体使用
    顺序控制 顺序控制 默认情况下,Go代码执行顺序是按照从上到下依次执行的,这种按照顺序执行的代码就叫做顺序语句。如下: 1 2 3 4 5 6
  • Golang图片验证码的使用方法介绍

    Golang图片验证码的使用方法介绍
    一、背景 最近在使用到Golang进行原生开发,注册和登录页面都涉及到图片验证码的功能。找了下第三方库的一些实现,发现了这个库用得还
  • Golang中实现类似类与继承的方法
    在Go语言中,并没有像传统面向对象编程语言(Java、C++)中那样的类和继承的概念。Go语言采用了结构体和组合的方式来实现类似的功能。
  • Golang中四种gRPC模式举例介绍
    1. Unary RPC proto文件如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 syntax = proto3; option go_package=.;service; message HelloRequest { // Name of the person to greet string n
  • go-python库使用应用介绍
    在当今软件开发领域,跨语言编程已经成为一种常见的需求。不同的编程语言各自有其优势和适用场景,因此在项目开发过程中,经常需要
  • Go json反序列化“null“的问题解决

    Go json反序列化“null“的问题解决
    有这么一段代码,可以先看一下有没有什么问题,作用是输入一段json字符串,反序列化成map,然后将另一个inputMap的内容,merge进这个map
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计