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

标签 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))

}

我想做的是直接打印当我访问 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/

相关文章:

Python http requests.exceptions.ConnectionError : ('Connection aborted.' , RemoteDisconnected ('Remote end closed connection without response' ))

http - Rebol2 的读取/自定义文档?

bash - 是否可以从外部完成命令动态修改 compopts?

jquery - JSON 数组没有 key ?

php - 有没有办法可以查询 mysql 并将 json 数据内部连接在一起?

javascript - 获取 JSON 格式的 Google Map KML 数据

javascript - 使用 POST 设置请求 header 内容类型

go - 将 int96 时间戳从 Parquet 转换到 golang

go - 结构不能为零,但这是编译

json - 访问 Logstash 中的嵌套 JSON 字段