这是我的代码:
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))
}
我想做的是直接打印当我访问 http.Get
中的 JSON 格式的 URL 时出现的相同内容,但我得到了其他内容。如何在不编码 JSON 内容表单 http.Get
然后编码并返回它的情况下执行此操作?
最佳答案
http.Response
返回者 http.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 - 如何在Go中直接打印从http.Get获取的json到http.ResponseWriter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38498018/