gpt4 book ai didi

http - 为什么我尝试发送 POST 请求时出现错误?

转载 作者:行者123 更新时间:2023-12-01 22:14:48 25 4
gpt4 key购买 nike

我尝试将 POST 请求发送到我的 Web 服务器,但是当我尝试获取响应正文时发生错误。我也尝试用 Postman 发送请求,一切正常。来自服务器的响应是 JSON 数据,它提供了有关加载图片的一些信息。
Error

package main

import (
"fmt"
"bytes"
"mime/multipart"
"os"
"path/filepath"
"io"
"net/http"
"io/ioutil"
)

func main() {

url := "localhost:6000/..."
method := "POST"

payload := &bytes.Buffer{}
writer := multipart.NewWriter(payload)
file, errFile1 := os.Open("/home/...")
defer file.Close()
part1, errFile1 := writer.CreateFormFile("Image",filepath.Base("/home/..."))
_, errFile1 = io.Copy(part1, file)
if errFile1 !=nil {
fmt.Println(errFile1)
}
err := writer.Close()
if err != nil {
fmt.Println(err)
}


client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)

if err != nil {
fmt.Println(err)
}
req.Header.Set("Content-Type", writer.FormDataContentType())
res, err := client.Do(req)
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
fmt.Println(string(body))
}

最佳答案

这是发生错误的第 42-43 行:

res, err := client.Do(req)
defer res.Body.Close()

如果 client.Do()返回错误, res可能是 nil ,等等 res.Body.Close()是运行时 panic 。您必须首先检查错误,并且只有在 error 时才继续关闭正文是 nil :
res, err := client.Do(req)
if err != nil {
// Handle error and return:
return
}
defer res.Body.Close()

见相关: Do we need to close the response object if an error occurs while calling http.Get(url)?

另外: Is resp.Body.Close() required if I don't need response?

关于http - 为什么我尝试发送 POST 请求时出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61168305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com