Go語言Http調用之Post請求詳解
前言
上篇文章 Go HTTP 調用(上) 介紹了如何進行 HTTP 調用,并通過 GET 請求的例子,講述了 query
參數(shù)和 header
參數(shù)如何設置,以及響應體的獲取方法。 本文繼上文,接下來會通過 POST
請求,對其他參數(shù)的設置進行介紹。
POST 請求
發(fā)起 HTTP
POST
請求時,攜帶 json
格式的 body
參數(shù)是最常見的,這是因為 json
格式的參數(shù)可讀性好,對于層級結構較為復雜的數(shù)據(jù)也能應對,并且這符合 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
結構體,創(chuàng)建結構體變量 user,通過json.Marshal
函數(shù),將user
轉成[]byte
數(shù)據(jù),然后通過bytes.NewReader
函數(shù),將[]byte
數(shù)據(jù)轉成Reader
指針變量。 http.NewRequestWithContext
函數(shù),最后一個參數(shù)是為body
參數(shù),接收的變量類型是Reader
接口的實現(xiàn)體。第一步將user
轉成Reader
指針變量就是為了在這里進行傳遞。- 傳遞
json
類型的body
參數(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())
小結
本文通過 POST
請求,介紹了如何傳遞 json
類型和 application/x-www-form-urlencoded
類型的 body
參數(shù)。對于 HTTP
中的 query
參數(shù)和 body
參數(shù)的如何傳遞,上下兩篇文章已經通過例子進行介紹。雖然舉的例子是 GET
和 POST
請求,如果想要調用 PUT
、DELETE
等請求,只需要在 NewRequestWithContext
函數(shù)中,指定第二個參數(shù)為 http.MethodPut
、http.MethodDelete
等就行。
到此這篇關于Go語言Http調用之Post請求詳解的文章就介紹到這了,更多相關Go語言 Post請求內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Go 如何基于IP限制HTTP訪問頻率的方法實現(xiàn)
這篇文章主要介紹了Go 如何基于IP限制HTTP訪問頻率的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11go數(shù)據(jù)結構和算法BitMap原理及實現(xiàn)示例
這篇文章主要為大家介紹了go數(shù)據(jù)結構和算法BitMap原理及實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07解讀unsafe.Pointer和uintptr的區(qū)別
這篇文章主要介紹了解讀unsafe.Pointer和uintptr的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02mac下golang安裝了windows編譯環(huán)境后編譯變慢
這篇文章主要介紹了mac下golang安裝了windows編譯環(huán)境后編譯變慢的處理方法,非常的簡單,有相同問題的小伙伴可以參考下。2015-04-04