網站首頁 編程語言 正文
前言
上篇文章 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
相關推薦
- 2022-09-19 C++四種cast使用詳細介紹_C 語言
- 2022-09-16 Pandas?類型轉換astype()的實現_python
- 2022-07-06 C語言深入探究自定義類型之結構體與枚舉及聯合_C 語言
- 2022-04-12 error: failed to push some refs to 'git@gitlab.xxx
- 2022-08-05 基于python詳解PyScript到底是什么_python
- 2023-01-17 pytest內置fixture使用臨時目錄流程詳解_python
- 2022-12-24 darknet框架中YOLOv3對數據集進行訓練和預測詳解_python
- 2022-05-10 react設置多個classname
- 最近更新
-
- 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同步修改后的遠程分支