gpt4 book ai didi

http - 使用 MUX 包将查询参数传递给 Go HTTP 请求处理程序

转载 作者:IT王子 更新时间:2023-10-29 01:10:36 24 4
gpt4 key购买 nike

我试图在我试图发送到 Go 服务器的请求中传递一个附加参数 -

websocket.create_connection("ws://<ip>:port/x/y?token="qwerty")

Go服务器实现如下——

func main() {
err := config.Parse()
if err != nil {
glog.Error(err)
os.Exit(1)
return
}

flag.Parse()
defer glog.Flush()

router := mux.NewRouter()
http.Handle("/", httpInterceptor(router))

router.Handle("/v1/x", common.ErrorHandler(stats.GetS)).Methods("GET")
router.Handle("/v1/x/y", common.ErrorHandler(stats.GetS)).Methods("GET")

var listen = fmt.Sprintf("%s:%d", config.Config.Ip, config.Config.Port)
err = http.ListenAndServe(listen, nil)

if err != nil {
glog.Error(err)
os.Exit(1)
}
}

func httpInterceptor(router http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
startTime := time.Now()

if !auth.Auth(w, req) {
http.Error(w, "Failed authentication", 401)
return
}

router.ServeHTTP(w, req)

finishTime := time.Now()
elapsedTime := finishTime.Sub(startTime)

switch req.Method {
case "GET":
case "POST":
}

})
}

我应该如何在 Go 服务器中查找和解析 token 以便身份验证成功?

库函数

func ParseFromRequest(req *http.Request, keyFunc Keyfunc) (token *Token, err error) {

// Look for an Authorization header
if ah := req.Header.Get("Authorization"); ah != "" {
// Should be a bearer token
if len(ah) > 6 && strings.ToUpper(ah[0:6]) == "BEARER" {
return Parse(ah[7:], keyFunc)
}
}

// Look for "access_token" parameter
req.ParseMultipartForm(10e6)
if tokStr := req.Form.Get("access_token"); tokStr != "" {
return Parse(tokStr, keyFunc)
}

return nil, ErrNoTokenInRequest

}

最佳答案

调用FormValue获取查询参数:

token := req.FormValue("token")

req 是一个*http.Request

另一种方法是调用 ParseForm并直接访问 req.Form:

if err := req.ParseForm(); err != nil {
// handle error
}
token := req.Form.Get("token")

OP 在评论中询问如何将 “token” 映射到 “access_token” 以获取正在寻找 “access_token” 的外部包。在调用外部包之前执行这段代码:

if err := req.ParseForm(); err != nil {
// handle error
}
req.Form["access_token"] = req.Form["token"]

当外部包调用req.Form.Get("access_token")时,会得到与"token"参数相同的值。

关于http - 使用 MUX 包将查询参数传递给 Go HTTP 请求处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28159520/

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