如何解决如何在 http.Client 中为不同的域发送相同的 cookie (CookieJar)
我正在使用 http.Client
为某些生产资源发出 HTTP 请求。
该资源有两个具有相同业务逻辑的不同域 (例如:example.com、instance.com)。因此,example.com 的所有 cookie 都对 instance.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。