douhuibo5635
2018-03-27 09:49
浏览 405
已采纳

如何全局设置cookiejar,以便在每个http.Client请求中都存在cookie

I am new here and a bit confused with setting cookie jar gloabally. I am using cookiejar from the http package and this is my implementation from other docs available in setting the cookies as jar in http.Client.

    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

What I am trying to achieve here is to have this declared gloabally so that once the jar is set the subsequent client request will have the cookies. If I place it in any other function it gets sets to nil again.

    jar, _ := cookiejar.New(nil)
    client := &http.Client{
      Jar: jar,
    }

Any best practise available in how to do this? Thank you.

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • duanchu2607 2018-03-27 10:01
    已采纳

    http.Client is designed to be reused:

    The Client's Transport typically has internal state (cached TCP connections), so Clients should be reused instead of created as needed. Clients are safe for concurrent use by multiple goroutines.

    So simply just create / configure an http.Client, and reuse it everywhere where you want your cookiejar to work.

    If one configured http.Client doesn't fit all your use cases, then create as many clients that do. To ensure the same cookiejar is used, you may create a client "factory" function which ensures the returned http.Client will have the Jar set.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • dongxiaoying5882 2018-03-27 10:04

    Undoable (at least you cannot force the use of your client).

    Nearest is injecting your client into net/http.DefaultClient.

    Most sensible is to use icza's solution.

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题