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

Using Go to make a POST request using a JSON file

我是 Go 的新手,四处搜索这个问题但没有找到任何东西,所以如果这是我错过的重复问题,我深表歉意。

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

我想我可以用我拉入的 JSON 文件替换 jsonData 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)
}

要post一个文件,使用opened文件作为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)

注意:无论您想要通过 http 协议 post 什么(文字、文件、图像,甚至视频等),实际上您都是 post 字节流。这意味着您应该将任何您想要 post 的内容视为 二进制字节数组 .

在你的情况下,你应该首先打开你想要 post 的文件,然后创建一个指向你的文件的 io.Reader 类型的实例。简单代码如下:

f, _ := os.Open("./my-file")
    
http.Post("https://example.com/api","application/json",f)