首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

net/http/cookiejar

  • import "net/http/cookiejar"
  • 概述
  • 索引
  • 示例

概述

Cookiejar包实现了符合内存RFC 6265的http.CookieJar。

索引

  • type Jar
  • func New(o *Options) (*Jar, error)
  • func (j *Jar) Cookies(u *url.URL) (cookies []*http.Cookie)
  • func (j *Jar) SetCookies(u *url.URL, cookies []*http.Cookie)
  • type Options
  • type PublicSuffixList

示例

文件包

Jar从net/http包实现http.CookieJar接口。

代码语言:javascript
复制
type Jar struct {
        // contains filtered or unexported fields
}
代码语言:javascript
复制
func New(o *Options) (*Jar, error)

New返回一个新的cookie jar。无*选项相当于零选项。

示例

代码:

代码语言:javascript
复制
// Start a server to give us cookies.
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if cookie, err := r.Cookie("Flavor"); err != nil {
                http.SetCookie(w, &http.Cookie{Name: "Flavor", Value: "Chocolate Chip"})
        } else {
                cookie.Value = "Oatmeal Raisin"
                http.SetCookie(w, cookie)
        }
}))
defer ts.Close()

u, err := url.Parse(ts.URL)
if err != nil {
        log.Fatal(err)
}

// All users of cookiejar should import "golang.org/x/net/publicsuffix"
jar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
if err != nil {
        log.Fatal(err)
}

client := &http.Client{
        Jar: jar,
}

if _, err = client.Get(u.String()); err != nil {
        log.Fatal(err)
}

fmt.Println("After 1st request:")
for _, cookie := range jar.Cookies(u) {
        fmt.Printf("  %s: %s\n", cookie.Name, cookie.Value)
}

if _, err = client.Get(u.String()); err != nil {
        log.Fatal(err)
}

fmt.Println("After 2nd request:")
for _, cookie := range jar.Cookies(u) {
        fmt.Printf("  %s: %s\n", cookie.Name, cookie.Value)
}

输出:

代码语言:javascript
复制
After 1st request:
  Flavor: Chocolate Chip
After 2nd request:
  Flavor: Oatmeal Raisin

func (*Jar) Cookies(显示源文件)

代码语言:javascript
复制
func (j *Jar) Cookies(u *url.URL) (cookies []*http.Cookie)

Cookies实现http.CookieJar界面的Cookies方法。

如果URL的方案不是HTTP或HTTPS,它将返回空片。

func (*Jar) SetCookies(显示源文件)

代码语言:javascript
复制
func (j *Jar) SetCookies(u *url.URL, cookies []*http.Cookie)

SetCookies实现了http.CookieJar接口的SetCookies方法。

如果URL的方案不是HTTP或HTTPS,它什么也不做。

选项是创建新Jar的选项。

代码语言:javascript
复制
type Options struct {
        // PublicSuffixList is the public suffix list that determines whether
        // an HTTP server can set a cookie for a domain.
        //
        // A nil value is valid and may be useful for testing but it is not
        // secure: it means that the HTTP server for foo.co.uk can set a cookie
        // for bar.co.uk.
        PublicSuffixList PublicSuffixList
}

type PublicSuffixList(显示源文件)

PublicSuffixList提供域的公共后缀。例如:

代码语言:javascript
复制
- the public suffix of "example.com" is "com",
- the public suffix of "foo1.foo2.foo3.co.uk" is "co.uk", and
- the public suffix of "bar.pvt.k12.ma.us" is "pvt.k12.ma.us".

PublicSuffixList的实现必须安全,以供多个goroutine并发使用。

总是返回“”的实现是有效的,对于测试可能有用,但它不安全:这意味着foo.com的HTTP服务器可以为bar.com设置cookie。

公共后缀列表实现位于golang.org/x/net/publicsuffix包中。

代码语言:javascript
复制
type PublicSuffixList interface {
        // PublicSuffix returns the public suffix of domain.
        //
        // TODO: specify which of the caller and callee is responsible for IP
        // addresses, for leading and trailing dots, for case sensitivity, and
        // for IDN/Punycode.
        PublicSuffix(domain string) string

        // String returns a description of the source of this public suffix
        // list. The description will typically contain something like a time
        // stamp or version number.
        String() string
}

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com