...

パッケージ cookiejar

import "net/http/cookiejar"
概要
目次

概要 ▾

cookiejar パッケージは,インメモリの RFC 6265 に適合した http.CookieJar を実装します。

type Jar 1.1

Jar は net/http パッケージから http.CookieJar インターフェースを実装します。

type Jar struct {
    // エクスポートされていないフィールドがあります
}

func New 1.1

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

New は新しいクッキージャーを返します。 nil *Options は,ゼロの Options と同等です。

コード:

// サーバーを起動してクッキーを入手します。
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)
}

// cookiejar のすべてのユーザーは "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 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

Options は新しい Jar を作成するときのオプションです。

type Options struct {
    // PublicSuffixList は, HTTP サーバーがドメインに Cookie を設定できるかどうかを決定するパブリックサフィックスリストです。
    //
    // nil 値は有効であり,テストには役立つかもしれませんが,安全ではありません。
    // つまり, foo.co.uk の HTTP サーバーは bar.co.uk の Cookie を設定できるということです。
    PublicSuffixList PublicSuffixList
}

type PublicSuffixList 1.1

PublicSuffixList は,ドメインのパブリックサフィックスを提供します。 例:

- "example.com" のパブリックサフィックスは "com" ,
- "foo1.foo2.foo3.co.uk" のパブリックサフィックスは "co.uk" ,
- "bar.pvt.k12.ma.us" のパブリックサフィックスは "pvt.k12.ma.us" です。

PublicSuffixList の実装は,複数のゴルーチンによる平行使用に対して安全でなければなりません。

常に "" を返す実装は有効であり,テストには役立つかもしれませんが,安全ではありません。 つまり, foo.com の HTTP サーバーは bar.com の Cookie を設定できるということです。

パブリックサフィックスリストの実装は,パッケージ golang.org/x/net/publicsuffix にあります。

type PublicSuffixList interface {
    // PublicSuffix は,ドメインのパブリックサフィックスを返します。
    //
    // TODO: 発信者と着信者のどちらが IP アドレス,先頭と末尾のドット,大文字と小文字の区別,および IDN/Punycode を担当するかを指定します。
    PublicSuffix(domain string) string

    // String は,このパブリックサフィックスリストのソースの説明を返します。
    // 説明には通常,タイムスタンプやバージョン番号などが含まれます。
    String() string
}