如何使用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请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你了解Go语言实现的并发神库conc

    一文带你了解Go语言实现的并发神库conc

    前几天逛github发现了一个有趣的并发库-conc,这篇文章将为大家详细介绍一下这个库的实现,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-01-01
  • 一文详解Go语言切片是如何扩容的

    一文详解Go语言切片是如何扩容的

    切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。所以本文就来看看Go语言切片是如何扩容的吧
    2023-04-04
  • 深入理解Go设计模式之代理模式

    深入理解Go设计模式之代理模式

    代理模式是一种结构型设计模式, 其中代理控制着对于原对象的访问, 并允许在将请求提交给原对象的前后进行一些处理,从而增强原对象的逻辑处理,这篇文章主要来学习一下代理模式的构成和用法,需要的朋友可以参考下
    2023-05-05
  • 如何使用proto组件编译pb.go文件

    如何使用proto组件编译pb.go文件

    这篇文章主要介绍了如何使用proto组件编译pb.go文件的详细过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 在Gin框架中正确删除Cookie的操作指南

    在Gin框架中正确删除Cookie的操作指南

    在现代Web开发中,Cookie管理是构建用户友好应用的关键环节,Gin作为Go语言中最受欢迎的Web框架之一,提供了简洁而强大的Cookie处理机制,本文将深入探讨如何在Gin框架中正确删除Cookie,需要的朋友可以参考下
    2025-08-08
  • Go语言Gin处理响应方式详解

    Go语言Gin处理响应方式详解

    gin框架封装了常用的数据格式方法响应于客户端,下面这篇文章主要给大家介绍了关于Go语言Gin处理响应方式的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Go语言Gin框架前后端分离项目开发实例

    Go语言Gin框架前后端分离项目开发实例

    本文主要介绍了Go语言Gin框架前后端分离项目开发工程化实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 一文带大家搞懂Go语言中的迭代器

    一文带大家搞懂Go语言中的迭代器

    迭代器是使用户可在容器对象上遍访的对象,设计人员使用此接口无需关心容器对象的内存分配的实现细节,本文主要为大家详细介绍一下Go语言中的迭代器的实现,需要的可以了解下
    2025-02-02
  • Golang配置管理Viper的实现

    Golang配置管理Viper的实现

    Viper是Go语言配置管理库,支持JSON/YAML/TOML等多格式,可动态监听配置变更,本文就来介绍一下Golang配置管理Viper的实现,感兴趣的可以了解一下
    2025-07-07
  • vscode中安装Go插件和配置Go环境详细步骤

    vscode中安装Go插件和配置Go环境详细步骤

    要在VSCode中配置Go语言插件,首先需要确保你的电脑已经安装了Go环境和最新版本的VSCode,这篇文章主要给大家介绍了关于vscode中安装Go插件和配置Go环境的相关资料,需要的朋友可以参考下
    2024-01-01

最新评论