提交 eb6275eb 编写于 作者: N ning

refactor: proxy api

上级 ac3a5e52
package router
import (
"bytes"
"context"
"crypto/tls"
"fmt"
"io"
"net"
"net/http"
"net/http/httputil"
......@@ -164,10 +167,39 @@ func (rt *Router) dsProxy(c *gin.Context) {
transportPut(dsId, ds.UpdatedAt, transport)
}
modifyResponse := func(r *http.Response) error {
// 当后端服务返回401时,改变响应状态码和内容
if r.StatusCode == http.StatusUnauthorized {
body, err := io.ReadAll(r.Body)
if err != nil {
return err
}
r.Body.Close()
// 重新填充响应体
r.Body = io.NopCloser(bytes.NewBuffer(body))
// 创建自定义错误,并返回
customErr := fmt.Errorf("unauthorized access: %v", string(body))
// 调整返回的HTTP状态码和内容
r.StatusCode = http.StatusOK
r.Status = "200 OK"
c.JSON(http.StatusOK, gin.H{
"err": customErr.Error(),
})
return customErr
}
return nil
}
proxy := &httputil.ReverseProxy{
Director: director,
Transport: transport,
ErrorHandler: errFunc,
Director: director,
Transport: transport,
ErrorHandler: errFunc,
ModifyResponse: modifyResponse,
}
proxy.ServeHTTP(c.Writer, c.Request)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册