Go語言Http調(diào)用之Post請求詳解
前言
上篇文章 Go HTTP 調(diào)用(上) 介紹了如何進行 HTTP 調(diào)用,并通過 GET 請求的例子,講述了 query
參數(shù)和 header
參數(shù)如何設(shè)置,以及響應(yīng)體的獲取方法。 本文繼上文,接下來會通過 POST
請求,對其他參數(shù)的設(shè)置進行介紹。
POST 請求
發(fā)起 HTTP
POST
請求時,攜帶 json
格式的 body
參數(shù)是最常見的,這是因為 json
格式的參數(shù)可讀性好,對于層級結(jié)構(gòu)較為復(fù)雜的數(shù)據(jù)也能應(yīng)對,并且這符合 RestFul API
的規(guī)范。因此以下的示例為:發(fā)送 HTTP
POST
請求,并攜帶 json
類型的 body
參數(shù)。
import ( "bytes" "context" "encoding/json" "fmt" "io" "net/http" ) type User struct { Username string `json:"username"` Password string `json:"password"` } func main() { client := http.Client{} user := User{ Username: "123456", Password: "12346", } dataByte, err := json.Marshal(user) if err != nil { fmt.Println(err) } bodyReader := bytes.NewReader(dataByte) request, err := http.NewRequestWithContext(context.Background(), http.MethodPost, "http://localhost:8080/user", bodyReader) if err != nil { return } request.Header.Set("Content-Type", "application/json") resp, err := client.Do(request) if err != nil { fmt.Println(err) return } fmt.Println("statusCode: ", resp.StatusCode) body, err := io.ReadAll(resp.Body) if err != nil { return } defer resp.Body.Close() fmt.Println(string(body)) }
- 首先定義
User
結(jié)構(gòu)體,創(chuàng)建結(jié)構(gòu)體變量 user,通過json.Marshal
函數(shù),將user
轉(zhuǎn)成[]byte
數(shù)據(jù),然后通過bytes.NewReader
函數(shù),將[]byte
數(shù)據(jù)轉(zhuǎn)成Reader
指針變量。 http.NewRequestWithContext
函數(shù),最后一個參數(shù)是為body
參數(shù),接收的變量類型是Reader
接口的實現(xiàn)體。第一步將user
轉(zhuǎn)成Reader
指針變量就是為了在這里進行傳遞。- 傳遞
json
類型的body
參數(shù),需要在請求頭參數(shù)里設(shè)置Content-Type
的值為application/json
。
如果是發(fā)送 application/x-www-form-urlencoded
類型的表單數(shù)據(jù),需要改寫 body
參數(shù)的生成代碼:
values := url.Values{} values.Set("username", "1234") values.Set("password", "1234") bodyReader := strings.NewReader(values.Encode())
小結(jié)
本文通過 POST
請求,介紹了如何傳遞 json
類型和 application/x-www-form-urlencoded
類型的 body
參數(shù)。對于 HTTP
中的 query
參數(shù)和 body
參數(shù)的如何傳遞,上下兩篇文章已經(jīng)通過例子進行介紹。雖然舉的例子是 GET
和 POST
請求,如果想要調(diào)用 PUT
、DELETE
等請求,只需要在 NewRequestWithContext
函數(shù)中,指定第二個參數(shù)為 http.MethodPut
、http.MethodDelete
等就行。
到此這篇關(guān)于Go語言Http調(diào)用之Post請求詳解的文章就介紹到這了,更多相關(guān)Go語言 Post請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go 如何基于IP限制HTTP訪問頻率的方法實現(xiàn)
這篇文章主要介紹了Go 如何基于IP限制HTTP訪問頻率的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11go數(shù)據(jù)結(jié)構(gòu)和算法BitMap原理及實現(xiàn)示例
這篇文章主要為大家介紹了go數(shù)據(jù)結(jié)構(gòu)和算法BitMap原理及實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07解讀unsafe.Pointer和uintptr的區(qū)別
這篇文章主要介紹了解讀unsafe.Pointer和uintptr的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02golang結(jié)構(gòu)化日志slog的用法簡介
日志是任何軟件的重要組成部分,Go?提供了一個內(nèi)置日志包(slog),在本文中,小編將簡單介紹一下slog包的功能以及如何在?Go?應(yīng)用程序中使用它,感興趣的可以了解下2023-09-09mac下golang安裝了windows編譯環(huán)境后編譯變慢
這篇文章主要介紹了mac下golang安裝了windows編譯環(huán)境后編譯變慢的處理方法,非常的簡單,有相同問題的小伙伴可以參考下。2015-04-04go 類型轉(zhuǎn)換方式(interface 類型的轉(zhuǎn)換)
這篇文章主要介紹了go 類型轉(zhuǎn)換方式(interface 類型的轉(zhuǎn)換),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05