🔧 Enhance response body handling with gzip decompression and logging improvements in main.go
This commit is contained in:
30
main.go
30
main.go
@@ -2,6 +2,8 @@ package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
@@ -108,7 +110,33 @@ func handleProxy(cfg Config) http.HandlerFunc {
|
||||
log.Println("Request streaming: ", requestId, isStreamingRequest)
|
||||
|
||||
if !isStreamingRequest {
|
||||
io.Copy(w, resp.Body)
|
||||
log.Println("Request streaming: ", requestId, false)
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Println("Read response error: ", requestId, err)
|
||||
io.Copy(w, resp.Body)
|
||||
return
|
||||
}
|
||||
printRawBody := true
|
||||
contentEncoding := resp.Header.Get("Content-Encoding")
|
||||
if contentEncoding == "gzip" {
|
||||
gr, err := gzip.NewReader(bytes.NewReader(body))
|
||||
if err != nil {
|
||||
log.Println("Decompress error: ", requestId, err)
|
||||
} else {
|
||||
decodedBody, err := io.ReadAll(gr)
|
||||
if err != nil {
|
||||
log.Println("Decompress error: ", requestId, err)
|
||||
}
|
||||
gr.Close()
|
||||
printRawBody = false
|
||||
log.Println("Response[decoded]: ", requestId, contentEncoding, string(decodedBody))
|
||||
}
|
||||
}
|
||||
if printRawBody {
|
||||
log.Println("Response[raw]: ", requestId, string(body))
|
||||
}
|
||||
w.Write(body)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user