日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Go語言Http調用之Post請求詳解_Golang

作者:陳明勇 ? 更新時間: 2023-01-14 編程語言

前言

上篇文章 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 參數的如何傳遞,上下兩篇文章已經通過例子進行介紹。雖然舉的例子是 GETPOST 請求,如果想要調用 PUTDELETE 等請求,只需要在 NewRequestWithContext 函數中,指定第二個參數為 http.MethodPuthttp.MethodDelete 等就行。

原文鏈接:https://juejin.cn/post/7177033678369849381

欄目分類
最近更新