gpt4 book ai didi

json - 如何直接从 http.Get in Go 中获取的 json 打印到 http.ResponseWriter?

转载 作者:IT王子 更新时间:2023-10-29 01:42:04 33 4
gpt4 key购买 nike

这是我的代码:

func GetRepositories(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
res, err := http.Get(fmt.Sprintf("%s/%s", sconf.RegistryConf.url, sconf.RegistryConf.listrepo))
if err != nil {
w.WriteHeader(500)
log.Errorf("Could not get repositories: %s", err)
return
}
log.Info("Repositories returned")
fmt.Fprintf(w, fmt.Sprintf("%v", res))

}

我想做的是直接打印当我访问 JSON 格式的 http.Get 中的 URL 时出现的相同内容,但我得到了其他内容。如果不整理 JSON 内容形式 http.Get 然后整理并返回它,我该如何做到这一点?

最佳答案

http.Responsehttp.Get() 返回不仅仅是服务器发送的(JSON)数据,它是一个包含所有其他 HTTP 协议(protocol)相关字段(例如 HTTP 状态代码、协议(protocol)版本、 header 值等)的结构。您需要“转发”的只是 Response.Body 字段,它是一个 io.ReadCloser , 所以你可以从服务器发送的实际数据中读取。

您可以使用 io.Copy()将正文从 http.Get() 的响应复制到您的 http.ResponseWriter .在此之前,建议设置与您获得的相同的内容类型。

defer res.Body.Close()
if contentType := res.Header.Get("Content-Type"); contentType != "" {
w.Header().Set("Content-Type", contentType)
}
if _, err := io.Copy(w, res.Body); err != nil {
// Handle error
}

关于json - 如何直接从 http.Get in Go 中获取的 json 打印到 http.ResponseWriter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38498018/

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