Package cookiejar

import "net/http/cookiejar"
Overview
Index
Examples

Overview ▾

程序包cookiejar实现了与RFC 6265兼容的内存中http.CookieJar.

type Jar 1.1

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

type Jar struct {
    // contains filtered or unexported fields
}

func New 1.1

func New(o *Options) (*Jar, error)

New返回一个新的cookie罐. nil * Options等于零Options.

Example

Code:

// 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)
}

Output:

After 1st request:
  Flavor: Chocolate Chip
After 2nd request:
  Flavor: Oatmeal Raisin

func (*Jar) Cookies 1.1

func (j *Jar) Cookies(u *url.URL) (cookies []*http.Cookie)

Cookies实现了http.CookieJar接口的Cookies方法.

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

func (*Jar) SetCookies 1.1

func (j *Jar) SetCookies(u *url.URL, cookies []*http.Cookie)

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

如果URL的方案不是HTTP或HTTPS,则不执行任何操作.

type Options 1.1

选项是用于创建新Jar的选项.

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 1.1

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

- 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中提供了公共后缀列表实现.

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
}

by  ICOPY.SITE