登录
首页 >  Golang >  Go问答

什么是有效的请求转发的最佳方式?

来源:stackoverflow

时间:2024-02-12 11:54:22 418浏览 收藏

今天golang学习网给大家带来了《什么是有效的请求转发的最佳方式?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我刚刚开始使用 golang,我想在 go 中重新制作我已经可以使用的 nodejs/typescript 应用程序。

我的 api 的一个端点只是添加服务器端生成的授权标头并向远程 api 发送请求。基本上通过调用我的 api 而不是远程 api 来为我填充这些标头。

这就是我现在正在写的内容

func endpoint(ctx *fiber.ctx) error {
    url := "https://api.twitch.tv" + ctx.originalurl()

    req, _ := http.newrequest(http.methodget, url, nil)

    req.header.set("authorization", "bearer ---------")
    req.header.set("client-id", "---------")

    client := &http.client{}
    res, err := client.do(req)

    // temporary error handling
    if err != nil {
        log.fatalln(err)
    }

    body, err := ioutil.readall(res.body)

    // temporary error handling
    if err != nil {
        log.fatalln(err)
    }

    var forwardedbody interface{}

    json.unmarshal(body, &forwardedbody)

    return ctx.status(fiber.statusok).json(forwardedbody)
}

我想知道我是否采取了正确的步骤,因为发出请求,使用 ioutil 解析 json 响应,然后将其解组以将其发回,对于我想要实现的简单性来说似乎有点过分了?

编辑:谢谢您的帮助,这就是我想要的

func Endpoint(ctx *fiber.Ctx) error {
    url := "https://api.twitch.tv" + ctx.OriginalURL()

    req, _ := http.NewRequest(http.MethodGet, url, nil)

    req.Header.Set("Authorization", "Bearer ---------")
    req.Header.Set("Client-ID", "---------")

    client := &http.Client{}
    res, err := client.Do(req)

    if err != nil {
        return ctx.SendStatus(fiber.StatusBadRequest)
    }

    ctx.Set("Content-Type", "application/json; charset=utf-8")

    return ctx.Status(res.StatusCode).SendStream(res.Body)
}

正确答案


您可以使用 httputil.ReverseProxy。它采用基本 url 并将请求转发到基本 url,连接路径。

http.handle("/", &httputil.reverseproxy{
    director: func(r *http.request) {
        r.url.scheme = "https"
        r.url.host = "go.dev"
        r.host = r.url.host
        r.header.set("x-foo", "bar")
    },
})

如果您不从根路径 / 提供此服务,则可以使用 StripPrefix

http.HandleFunc("/foo/", http.StripPrefix("/foo/", proxy)

还有一个辅助函数 NewSingleHostReverseProxy,它可能无需您自己配置代理结构。但我认为最好将主机标头与自定义标头一起设置。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《什么是有效的请求转发的最佳方式?》文章吧,也可关注golang学习网公众号了解相关技术文章。

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