gpt4 book ai didi

Golang 反向代理返回 Not found 或 Forbidden 错误

转载 作者:IT王子 更新时间:2023-10-29 02:20:20 31 4
gpt4 key购买 nike

我正在尝试创建一个反向代理,它接受所有请求并将它们重定向到目标 url,如 google.com 或任何其他 API。不幸的是,所有目标都返回错误,例如找不到页面或禁止错误

func main() {
r := gin.Default()

eanAPI := api.NewEanAPI()

routers.InitRedirectRoutes(r, eanAPI)
port := os.Getenv("PORT")
if len(port) == 0 {
port = "8000"
}
r.Run(":" + port)
}

// InitRedirectRoutes initialize routes redirection.
func InitRedirectRoutes(r *gin.Engine, eanAPI api.EanAPI) {
r.POST("/*action", eanAPI.ReverseProxy)
r.GET("/*action", eanAPI.ReverseProxy)
}


type EanAPI interface {
ReverseProxy(ctx *gin.Context)
}

type eanAPI struct {
baseURL string
}

func NewEanAPI() EanAPI {
return &eanAPI{}
}

func (api *eanAPI) ReverseProxy(ctx *gin.Context) {
// proxy
forwardToHost := "http://httpbin.org/"
// I tried with "https://jsonplaceholder.typicode.com/"
"http://google.com"

reverseProxy := proxy.NewProxy(forwardToHost)
reverseProxy.Handle(ctx.Writer, ctx.Request, url.Parse(forwardToHost))
}

type Prox struct {
target *url.URL
proxy *httputil.ReverseProxy
}

func NewProxy(target string) *Prox {
url, _ := url.Parse(target)
fmt.Println("url", url)
return &Prox{target: url, proxy: httputil.NewSingleHostReverseProxy(url)}
}

func (p *Prox) Handle(w http.ResponseWriter, r *http.Request, origin *url.URL) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Header().Set("X-Forwarded-Host", r.Host)
w.Header().Set("X-Origin-Host", origin.Host)
r.URL.Scheme = origin.Scheme
r.URL.Host = origin.Host

p.proxy.ServeHTTP(w, r)
}

我花了很多天试图设置适当的 header ,但到目前为止没有任何效果。我认为 header 设置不正确,但我不知道如何从客户端复制 header 并将其添加到代理。

我使用代理而不是重定向,因为我必须对正文请求和响应做一些工作!

提前致谢!

最佳答案

不确定这是否有帮助,但 https://golang.org/pkg/net/http/httputil/#ReverseProxy您可以使用 Director 函数调试和更改请求的路径,检查传入的请求。还要确保不仅更改 req.URL.Host,还要更改 req.Host,因为它会被 apache/nginx 虚拟主机设置选中。不要放弃,记得玩得开心:)

关于Golang 反向代理返回 Not found 或 Forbidden 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52374659/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com