首页 > 后端开发 > Golang > 如何在 Go 中处理 HTTP 请求的身份验证 Cookie?

如何在 Go 中处理 HTTP 请求的身份验证 Cookie?

DDD
发布: 2024-11-08 22:56:02
原创
528 人浏览过

How to Handle Authentication Cookies for HTTP Requests in Go?

改进 Go 中 HTTP 查询的身份验证处理

问题:

考虑以下代码用于执行带有身份验证的 HTTP 请求:

client := &http.Client{}

// Authenticate
req, err := http.NewRequest("GET", "http://164.99.113.32/Authenticate", nil)
req.SetBasicAuth("<username>", "<password>")
resp, err := client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}

// Get Details
req.URL, _ = url.Parse("http://164.99.113.32/Details")
resp, err = client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}
登录后复制

身份验证成功后,尽管服务器端没有问题,但后续对“/Details”的请求失败,并出现 401 拒绝访问错误。

解决方案:

要解决此问题,需要使用 cookie jar 来管理会话信息。 Go 的 HTTP 客户端默认不处理此问题,因此我们必须定义自定义 cookie jar 实现:

type myjar struct {
    jar map[string] []*http.Cookie
}

func (p* myjar) SetCookies(u *url.URL, cookies []*http.Cookie) {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("The cookie being set is : %s\n", cookies)
    p.jar [u.Host] = cookies
}

func (p *myjar) Cookies(u *url.URL) []*http.Cookie {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("Cookie being returned is : %s\n", p.jar[u.Host])
    return p.jar[u.Host]
}
登录后复制

在 main 函数中,初始化自定义 cookie jar 并将其分配给 HTTP 客户端:

    jar := &myjar{}
    jar.jar = make(map[string] []*http.Cookie)
    client.Jar = jar
登录后复制

通过此实现,后续请求可以成功访问“/Details”端点。

以上是如何在 Go 中处理 HTTP 请求的身份验证 Cookie?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板