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

时间:2016-07-21 07:42:53

标签: json http go

这是我的代码:

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然后编组并返回它,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:2)

http.Response返回的http.Get()不仅仅是服务器发送的(JSON)数据,它还包含所有其他HTTP协议相关字段(例如HTTP状态代码,协议版本) ,标题值等)。你需要什么"转发"只是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
}