網站首頁 編程語言 正文
前言
上篇文章 Go HTTP 調用(上) 介紹了如何進行 HTTP 調用,并通過 GET 請求的例子,講述了 query
參數和 header
參數如何設置,以及響應體的獲取方法。 本文繼上文,接下來會通過 POST
請求,對其他參數的設置進行介紹。
POST 請求
發起 HTTP
POST
請求時,攜帶 json
格式的 body
參數是最常見的,這是因為 json
格式的參數可讀性好,對于層級結構較為復雜的數據也能應對,并且這符合 RestFul API
的規范。因此以下的示例為:發送 HTTP
POST
請求,并攜帶 json
類型的 body
參數。
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
結構體,創建結構體變量 user,通過json.Marshal
函數,將user
轉成[]byte
數據,然后通過bytes.NewReader
函數,將[]byte
數據轉成Reader
指針變量。 -
http.NewRequestWithContext
函數,最后一個參數是為body
參數,接收的變量類型是Reader
接口的實現體。第一步將user
轉成Reader
指針變量就是為了在這里進行傳遞。 - 傳遞
json
類型的body
參數,需要在請求頭參數里設置Content-Type
的值為application/json
。
如果是發送 application/x-www-form-urlencoded
類型的表單數據,需要改寫 body
參數的生成代碼:
values := url.Values{} values.Set("username", "1234") values.Set("password", "1234") bodyReader := strings.NewReader(values.Encode())
小結
本文通過 POST
請求,介紹了如何傳遞 json
類型和 application/x-www-form-urlencoded
類型的 body
參數。對于 HTTP
中的 query
參數和 body
參數的如何傳遞,上下兩篇文章已經通過例子進行介紹。雖然舉的例子是 GET
和 POST
請求,如果想要調用 PUT
、DELETE
等請求,只需要在 NewRequestWithContext
函數中,指定第二個參數為 http.MethodPut
、http.MethodDelete
等就行。
原文鏈接:https://juejin.cn/post/7177033678369849381
相關推薦
- 2023-02-12 react-router-domV6嵌套路由實現詳解_React
- 2022-10-12 Golang中panic的異常處理_Golang
- 2023-01-19 GO語言的控制語句詳解包括GO語言的指針語法_Golang
- 2022-07-03 級聯分類器算法原理解析_相關技巧
- 2022-11-28 golang進程在docker中OOM后hang住問題解析_Golang
- 2022-11-18 React中用@符號編寫文件路徑實現方法介紹_React
- 2022-05-25 spring的構造函數注入屬性@ConstructorBinding
- 2022-07-04 C語言植物大戰數據結構堆排序圖文示例_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支