登录
首页 >  Golang >  Go问答

代理网关发回 HTTP 响应

来源:stackoverflow

时间:2024-04-17 18:00:29 420浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《代理网关发回 HTTP 响应》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在寻找用 go 创建一个代理网关。 快完成了!仍然缺少一件事:将整个客户端响应发送到服务器请求。

我有自己的 http 处理程序:

func (f HttpHandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if rurl, err := getOriginurl(r.RequestURI); err == nil {
        [...]
        client := &Http.Client{}
        r.URL = rurl
        r.RequestURI = ""
        resp, err := client.Do(r)
        if err == nil {
            for k, vs := range resp.Header {
                for _, v := range vs {
                    w.Header().Set(k, v)
                }
            }
            w.WriteHeader(resp.StatusCode)
            if responseData,err := ioutil.ReadAll(resp.Body); err == nil {
                w.Write(responseData)
            }
        }
    }
}

func getOriginurl(request string) *url.URL {
   {...}
   // Would return an *url.URL with : http://127.0.0.1:8080/{requestURI}
}

我正在寻找一种方法来优化解析客户端对 responsewriter 响应的方式。 实际上我的问题是:如何彻底解析 responsewriter 的 response 类型?


解决方案


您可以使用 httputil.NewSingleHostReverseProxy 而不是您自己的 http 客户端逻辑。

httputil.NewSingleHostReverseProxy(rurl).ServeHTTP(w, r)

以上就是《代理网关发回 HTTP 响应》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>