gpt4 book ai didi

http - 使用 http.Client.Get 方法和 Body.Read() 方法处理时导致终止的 EOF 错误

转载 作者:IT王子 更新时间:2023-10-29 01:45:14 24 4
gpt4 key购买 nike

我正在使用 http 客户端获取 json 主体,并将其读取为字节数组,如

client := new(http.Client)
client.Timeout = time.Second * 10
GetJobJson, err := client.Get(joblocation.String()) //where joblocation is of type *url.Url
if err != nil {
errorlog.Err.Println("Error getting job from", joblocation.String(), err)
return false, http.StatusBadRequest, nil
}
buff := make([]byte, GetJobJson.ContentLength)
length, err := GetJobJson.Body.Read(buff) //This returns an EOF error
if err != nil {
errorlog.Err.Println("Error reading request body of length", length, "vs contentlength", GetJobJson.ContentLength, err)
return false, http.StatusBadRequest, nil
}

上面代码中,GetJobJson.Bodyio.ReadCloser类型,它实现了Reader,有Read 方法,我在这里将其用作

length, err := GetJobJson.Body.Read(buff) 

但是由于我在这里处理错误,它返回一个 EOF 错误。

我发送请求的 http 端点正在运行一个 apache 服务器,在这里提到它是因为我不确定它是否重要。

如果我没有处理错误,我会得到完整的 json 正文,它在远程服务器中,程序继续按预期工作。

处理此问题的最佳方法是什么?我使用的 Read 方法对这种情况不利吗?

最佳答案

处理 io.EOF 是使用 io.Reader 的契约的一部分,它表示没有更多内容可读。如果您已经阅读了您期望阅读的内容,则没有错误。如果您查看像 ioutil.ReadAll 这样的函数,您会发现它处理 EOF,并且在流的末尾不返回任何错误。

您也可以考虑不检查 ContentLength,因为它会阻止您处理分块响应。

关于http - 使用 http.Client.Get 方法和 Body.Read() 方法处理时导致终止的 EOF 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899240/

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