net/http/cookiejar

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.go punycode.go

type Jar(显示源文件)

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

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

func New(显示源文件)

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

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

示例

代码:

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

输出:

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

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

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

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

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

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

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

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

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

type Options(显示源文件)

选项是创建新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(显示源文件)

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 }