如何使用Golang發(fā)送Get和Post請求
前言
最近在研究釘釘機器人,發(fā)現(xiàn)釘釘?shù)牡谌浇涌谟袝r需要用Get或者Post請求訪問,雖然說可以通過Apifox直接模擬發(fā)送請求,但是我還是想研究一個如何使用Golang來發(fā)送Get和Post請求。
Get請求
package getUserid
import (
"crypto/tls"
"encoding/json"
"io/ioutil"
"net/http"
"strings"
"time"
)
type User struct { //我們發(fā)送get請求需要傳遞一個參數(shù)mobile,我們封裝一個對應(yīng)的結(jié)構(gòu)體
Mobile string `json:"mobile"`
}
type UserResopnseFail struct { //這個是如果訪問失敗的話,把失敗信息保存在結(jié)構(gòu)體創(chuàng)建的對象中
Errcode int `json:"errcode"`
Errmsg string `json:"errmsg"`
Result struct {
Userid string `json:"userid"`
} `json:"result"`
RequestId string `json:"request_id"`
}
type UserResponseSucc struct {// //這個是如果訪問成功的話,把成功信息保存在結(jié)構(gòu)體創(chuàng)建的對象中
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 //封裝響應(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{ //對客戶端進行一些配置
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}, Timeout: time.Duration(time.Second * 5)}
u := User{
Mobile: number,
} //聲明一個結(jié)構(gòu)體對象,把我們傳遞的參數(shù)放進去
usermarshal, err := json.Marshal(&u) //把結(jié)構(gò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)//發(fā)送請求
if err != nil {
return
}
defer resp.Body.Close()
body, err = ioutil.ReadAll(resp.Body) //把請求到的body轉(zhuǎn)化成byte[]
if err != nil {
return
}
dataSucc := UserResponseSucc{} //聲明一個響應(yīng)對象
err = json.Unmarshal(body, &dataSucc)//把resq.Body反序列化成一個結(jié)構(gòu)體對象
if err != nil {
dateFail := UserResopnseFail{}
err = json.Unmarshal(body, &dateFail)
if err != nil {
return
}
}
return dataSucc.Result.Userid,err
return
}以上即是Golang發(fā)送一個簡單的Get請求。
Post請求
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{ //對客戶端進行一些配置
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}, Timeout: time.Duration(time.Second * 5)}
//此處是post請求的請求題,我們先初始化一個對象
b := Body{
xxx :xxx,
}
//然后把結(jié)構(gòu)體對象序列化一下
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轉(zhuǎn)化成byte[]
if err != nil {
return
}
//初始化結(jié)構(gòu)體對象
r := Response{}
//把請求到的結(jié)構(gòu)反序列化到專門接受返回值的對象上面
err = json.Unmarshal(body, &r)
if err != nil {
return
}
// 此處舉行具體的邏輯判斷,然后返回即可
return
}
//此處是發(fā)送Post請求的請求體(我們根據(jù)具體的接口文檔定義即可)
type Body struct {
xxx string `json:"xxx"`
}
//此處是請求的返回結(jié)果(我們根據(jù)具體的接口文檔定義即可)
type Response struct {
Errcode int `json:"errcode"`
Result Result `json:"result"`
}總結(jié)
到此這篇關(guān)于如何使用Golang發(fā)送Get和Post請求的文章就介紹到這了,更多相關(guān)Golang發(fā)送Get和Post請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言基礎(chǔ)學(xué)習(xí)之map的示例詳解
哈希表是常見的數(shù)據(jù)結(jié)構(gòu),有的語言會將哈希稱作字典或者映射,在Go中,哈希就是常見的數(shù)據(jù)類型map,本文就來聊聊Golang中map的相關(guān)知識吧2023-04-04
Go Excelize API源碼解讀GetSheetViewOptions與SetPageLayo
這篇文章主要為大家介紹了Go Excelize API源碼解讀GetSheetViewOptions與SetPageLayout方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

