如何使用Golang發(fā)送Get和Post請(qǐng)求
前言
最近在研究釘釘機(jī)器人,發(fā)現(xiàn)釘釘?shù)牡谌浇涌谟袝r(shí)需要用Get或者Post請(qǐng)求訪問,雖然說可以通過Apifox直接模擬發(fā)送請(qǐng)求,但是我還是想研究一個(gè)如何使用Golang來發(fā)送Get和Post請(qǐng)求。
Get請(qǐng)求
package getUserid
import (
"crypto/tls"
"encoding/json"
"io/ioutil"
"net/http"
"strings"
"time"
)
type User struct { //我們發(fā)送get請(qǐng)求需要傳遞一個(gè)參數(shù)mobile,我們封裝一個(gè)對(duì)應(yīng)的結(jié)構(gòu)體
Mobile string `json:"mobile"`
}
type UserResopnseFail struct { //這個(gè)是如果訪問失敗的話,把失敗信息保存在結(jié)構(gòu)體創(chuàng)建的對(duì)象中
Errcode int `json:"errcode"`
Errmsg string `json:"errmsg"`
Result struct {
Userid string `json:"userid"`
} `json:"result"`
RequestId string `json:"request_id"`
}
type UserResponseSucc struct {// //這個(gè)是如果訪問成功的話,把成功信息保存在結(jié)構(gòu)體創(chuàng)建的對(duì)象中
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 //封裝請(qǐng)求
var resp *http.Response //封裝響應(yīng)
var body []byte
urlForUserID := "https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token=" + access_token//拼接URL
client = &http.Client{Transport: &http.Transport{ //對(duì)客戶端進(jìn)行一些配置
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}, Timeout: time.Duration(time.Second * 5)}
u := User{
Mobile: number,
} //聲明一個(gè)結(jié)構(gòu)體對(duì)象,把我們傳遞的參數(shù)放進(jìn)去
usermarshal, err := json.Marshal(&u) //把結(jié)構(gòu)體序列化成byte[]類型
if err != nil {
return
}
reqBody := strings.NewReader(string(usermarshal))//此處再處理一步,才能放入下方請(qǐng)求中
request, err = http.NewRequest(http.MethodPost, urlForUserID, reqBody)
if err != nil {
return
}
resp, err = client.Do(request)//發(fā)送請(qǐng)求
if err != nil {
return
}
defer resp.Body.Close()
body, err = ioutil.ReadAll(resp.Body) //把請(qǐng)求到的body轉(zhuǎn)化成byte[]
if err != nil {
return
}
dataSucc := UserResponseSucc{} //聲明一個(gè)響應(yīng)對(duì)象
err = json.Unmarshal(body, &dataSucc)//把resq.Body反序列化成一個(gè)結(jié)構(gòu)體對(duì)象
if err != nil {
dateFail := UserResopnseFail{}
err = json.Unmarshal(body, &dateFail)
if err != nil {
return
}
}
return dataSucc.Result.Userid,err
return
}以上即是Golang發(fā)送一個(gè)簡(jiǎn)單的Get請(qǐng)求。
Post請(qǐng)求
func Post(需要的參數(shù)) (需要返回的數(shù)據(jù)) {
var client *http.Client
var request *http.Request
var resp *http.Response
var body []byte
URL := "xxx"
client = &http.Client{Transport: &http.Transport{ //對(duì)客戶端進(jìn)行一些配置
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}, Timeout: time.Duration(time.Second * 5)}
//此處是post請(qǐng)求的請(qǐng)求題,我們先初始化一個(gè)對(duì)象
b := Body{
xxx :xxx,
}
//然后把結(jié)構(gòu)體對(duì)象序列化一下
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) //把請(qǐng)求到的body轉(zhuǎn)化成byte[]
if err != nil {
return
}
//初始化結(jié)構(gòu)體對(duì)象
r := Response{}
//把請(qǐng)求到的結(jié)構(gòu)反序列化到專門接受返回值的對(duì)象上面
err = json.Unmarshal(body, &r)
if err != nil {
return
}
// 此處舉行具體的邏輯判斷,然后返回即可
return
}
//此處是發(fā)送Post請(qǐng)求的請(qǐng)求體(我們根據(jù)具體的接口文檔定義即可)
type Body struct {
xxx string `json:"xxx"`
}
//此處是請(qǐng)求的返回結(jié)果(我們根據(jù)具體的接口文檔定義即可)
type Response struct {
Errcode int `json:"errcode"`
Result Result `json:"result"`
}總結(jié)
到此這篇關(guān)于如何使用Golang發(fā)送Get和Post請(qǐng)求的文章就介紹到這了,更多相關(guān)Golang發(fā)送Get和Post請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文帶你了解Go語言實(shí)現(xiàn)的并發(fā)神庫(kù)conc
前幾天逛github發(fā)現(xiàn)了一個(gè)有趣的并發(fā)庫(kù)-conc,這篇文章將為大家詳細(xì)介紹一下這個(gè)庫(kù)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-01-01
Go語言Gin框架前后端分離項(xiàng)目開發(fā)實(shí)例
本文主要介紹了Go語言Gin框架前后端分離項(xiàng)目開發(fā)工程化實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
vscode中安裝Go插件和配置Go環(huán)境詳細(xì)步驟
要在VSCode中配置Go語言插件,首先需要確保你的電腦已經(jīng)安裝了Go環(huán)境和最新版本的VSCode,這篇文章主要給大家介紹了關(guān)于vscode中安裝Go插件和配置Go環(huán)境的相關(guān)資料,需要的朋友可以參考下2024-01-01

