我對 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)
}
uj5u.com熱心網友回復:
要發布檔案,請使用打開的檔案作為 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)
uj5u.com熱心網友回復:
注意:無論您想通過 http 協議發布什么(文字、檔案、影像甚至視頻等),實際上您都發布了位元組流。這意味著您應該將要發布的任何內容視為二進制位元組陣列。
在您的情況下,您應該首先打開要發布的檔案,并創建一個指向您的檔案的 io.Reader 型別的實體。簡單代碼如下:
f, _ := os.Open("./my-file")
http.Post("https://example.com/api","application/json",f)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/426773.html
下一篇:SlackAPI將字串上傳為檔案
