如何使用Golang發(fā)送Get和Post請求
更新時間:2023年06月30日 15:50:13 作者:大杯無糖
這篇文章主要給大家介紹了關(guān)于如何使用Golang發(fā)送Get和Post請求的相關(guān)資料,Go語言(Golang)的標準庫提供了處理HTTP請求的功能,這使得將Go用于web應(yīng)用程序變得非常容易,需要的朋友可以參考下
前言
最近在研究釘釘機器人,發(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 Excelize API源碼解讀GetSheetViewOptions與SetPageLayo
這篇文章主要為大家介紹了Go Excelize API源碼解讀GetSheetViewOptions與SetPageLayout方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08