使用 Go 使用 JSON 文件发出 POST 请求

我对 Go 很陌生,四处寻找这个问题,但没有找到任何东西,所以如果这是我错过的重复,我深表歉意。


我需要使用 Go 发送一个 POST 请求,并让正文来自 JSON 文件。下面是来自https://golangtutorial.dev/tips/http-post-json-go/的代码的修改版本,我将其用作起点。


我在想我可以jsonData用我拉入的 JSON 文件替换 var,但我只是想知道这是否是正确的方法以及如何最好地做到这一点。谢谢!


package main


import (

    "bytes"

    "fmt"

    "io/ioutil"

    "net/http"

)


func main() {

    httpposturl := "https://reqres.in/api/users"


    // I think this is the block I need to alter?:

    var jsonData = []byte(`{

        "name": "morpheus",

        "job": "leader"

    }`)


    request, error := http.NewRequest("POST", httpposturl, bytes.NewBuffer(jsonData))

    request.Header.Set("Content-Type", "application/json; charset=UTF-8")


    client := &http.Client{}

    response, error := client.Do(request)

    if error != nil {

        panic(error)

    }

    defer response.Body.Close()


    fmt.Println("response Status:", response.Status)

}


一只萌萌小番薯
浏览 183回答 2
2回答

呼如林

要发布文件,请使用打开的文件作为 HTTP 请求正文:f, err := os.Open("file.json")if err != nil {    log.Fatal(err)}defer f.Close()httpposturl := "https://reqres.in/api/users"request, err := http.NewRequest("POST", httpposturl, f)if err != nil {    log.Fatal(err)}request.Header.Set("Content-Type", "application/json; charset=UTF-8")response, err := http.DefaultClient.Do(request)if err != nil {    log.Fatal(err)}defer response.Body.Close()fmt.Println("response Status:", response.Status)

largeQ

注意:无论您想通过 http 协议发布什么(文字、文件、图像甚至视频等),实际上您都发布了字节流。这意味着您应该将要发布的任何内容视为二进制字节数组。在您的情况下,您应该首先打开要发布的文件,并创建一个指向您的文件的 io.Reader 类型的实例。简单代码如下:f, _ := os.Open("./my-file")    http.Post("https://example.com/api","application/json",f)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go