From 2ba378f7ac7f72b991507f4eff7730e236d828e8 Mon Sep 17 00:00:00 2001 From: tbphp Date: Sun, 29 Jun 2025 18:57:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dgzip=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/proxy/server.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/internal/proxy/server.go b/internal/proxy/server.go index 8e20066..ad52090 100644 --- a/internal/proxy/server.go +++ b/internal/proxy/server.go @@ -4,6 +4,7 @@ package proxy import ( "bufio" "bytes" + "compress/gzip" "context" "encoding/json" "fmt" @@ -343,10 +344,26 @@ func (ps *ProxyServer) executeRequestWithRetry(c *gin.Context, startTime time.Ti // Read response body to get error information var errorMessage string - if bodyBytes, err := io.ReadAll(resp.Body); err == nil { - errorMessage = string(bodyBytes) + bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + errorMessage = fmt.Sprintf("HTTP %d (failed to read body: %v)", resp.StatusCode, err) } else { - errorMessage = fmt.Sprintf("HTTP %d", resp.StatusCode) + if resp.Header.Get("Content-Encoding") == "gzip" { + reader, gErr := gzip.NewReader(bytes.NewReader(bodyBytes)) + if gErr != nil { + errorMessage = fmt.Sprintf("gzip reader error: %v", gErr) + } else { + uncompressedBytes, rErr := io.ReadAll(reader) + reader.Close() + if rErr != nil { + errorMessage = fmt.Sprintf("gzip read error: %v", rErr) + } else { + errorMessage = string(uncompressedBytes) + } + } + } else { + errorMessage = string(bodyBytes) + } } var jsonError struct {