我是新来的,有点混淆设置cookie jar gloabally。我正在使用来自http包的cookiejar,这是我在http.Client中将cookie设置为jar时可用的其他文档的实现。
jar, _ := cookiejar.New(nil)
client := &http.Client{
Jar: jar,
}
req, _ := http.NewRequest("GET", request_url, nil)
q := req.URL.Query()
q.Add("authtoken", token)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
req.URL.RawQuery = q.Encode()
res, _ := client.Do(req)
defer res.Body.Close()
fmt.Println(res.Cookies()) // can see the cookies here
我在这里想要实现的是将其声明为全局声明,这样一旦设置了jar,后续的客户端请求就会有cookie。 如果我把它放在任何其他函数中,它会再次设置为nil。
jar, _ := cookiejar.New(nil)
client := &http.Client{
Jar: jar,
}
有关如何执行此操作的最佳做法? 谢谢。
答案 0 :(得分:6)
http.Client
旨在重复使用:
客户端的传输通常具有内部状态(缓存的TCP连接),因此应该重用客户端,而不是根据需要创建。客户可以安全地同时使用多个goroutines。
只需创建/配置http.Client
,然后在您希望Cookiejar工作的任何地方重复使用。
如果配置的http.Client
不适合您的所有用例,请创建尽可能多的客户端。为了确保使用相同的cookiejar,您可以创建一个客户端“factory”函数,以确保返回的http.Client
将设置Jar。
答案 1 :(得分:1)
可撤销(至少你不能强制使用你的客户端)。
最近将客户端注入net / http.DefaultClient。
最明智的是使用icza的解决方案。