登录
首页 >  Golang >  Go问答

在Go语言的http.Client中,如何为不同的域名发送相同的Cookie(CookieJar)

来源:stackoverflow

时间:2024-02-13 08:09:25 124浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《在Go语言的http.Client中,如何为不同的域名发送相同的Cookie(CookieJar)》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我正在使用 http.client 向某些生产资源发出 http 请求。

该资源有两个具有相同业务逻辑的不同域 (例如:example.com、instance.com)。因此 example.com 的所有 cookie 对 example.com 均有效,等等。

问题是我需要将相同的 cookie 发送到两个不同的域,这在 golang 中是不可能的。

func (*jar) cookies 返回具有特定域的 url 的 cookie,因此我必须调用一些 cookie 准备函数:

func (session *Session) PrepareCookiesForExample() {
    example, _ := url.Parse("https://example.com")

    session.client.Jar.SetCookies(example, session.client.Jar.Cookies(commu))
}

因此,我必须在每个请求中调用此函数,这非常不舒服,并且如果我忘记调用此函数,可能会导致错误(因为未发送 cookie)。

如何使用 cookiejar 为所有域发送相同的 cookie?


正确答案


首先,提醒您,将 cookie 限制在设置它们的域中是一项重要的安全功能,不应轻易绕过。 以下是如何创建自己的 cookie jar 的示例:

package main

import (
    "net/http"
    "net/url"
)

type SharedCookieJar struct {
    CookieSlice []*http.Cookie
}

func (jar *SharedCookieJar) SetCookies(u *url.URL, cookies []*http.Cookie) {
    jar.CookieSlice = append(jar.CookieSlice, cookies...)
}

func (jar *SharedCookieJar) Cookies(u *url.URL) []*http.Cookie {
    return jar.CookieSlice
}
    
func main() {
    c := http.Client{
        Jar:&SharedCookieJar{},
    }

    c.Get("https://example.com/")
    c.Get("https://instance.com/") // will use cookies set by example.com
}

有关接口的进一步阅读:https://tour.golang.org/methods/9

终于介绍完啦!小伙伴们,这篇关于《在Go语言的http.Client中,如何为不同的域名发送相同的Cookie(CookieJar)》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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