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
示例
新
文件包
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
}