| package service
|
|
|
| import (
|
| "bufio"
|
| "io"
|
| "net/http"
|
| )
|
|
|
|
|
| func StreamResponse(w http.ResponseWriter, resp *http.Response) error {
|
|
|
| for k, v := range resp.Header {
|
| for _, vv := range v {
|
| w.Header().Add(k, vv)
|
| }
|
| }
|
| w.WriteHeader(resp.StatusCode)
|
|
|
|
|
| flusher, ok := w.(http.Flusher)
|
| if !ok {
|
|
|
| _, err := io.Copy(w, resp.Body)
|
| return err
|
| }
|
|
|
|
|
| reader := bufio.NewReader(resp.Body)
|
| for {
|
| line, err := reader.ReadBytes('\n')
|
| if len(line) > 0 {
|
| _, writeErr := w.Write(line)
|
| if writeErr != nil {
|
| return writeErr
|
| }
|
| flusher.Flush()
|
| }
|
| if err != nil {
|
| if err == io.EOF {
|
| return nil
|
| }
|
| return err
|
| }
|
| }
|
| }
|
|
|
|
|
| func CopyResponse(w http.ResponseWriter, resp *http.Response) error {
|
| for k, v := range resp.Header {
|
| for _, vv := range v {
|
| w.Header().Add(k, vv)
|
| }
|
| }
|
| w.WriteHeader(resp.StatusCode)
|
| _, err := io.Copy(w, resp.Body)
|
| return err
|
| }
|
|
|