使用Golang来使用cookie

展示从服务器发送的cookie,并使用收到的cookie访问服务器的HTTP客户端示例代码。

package main

import (
  "net/http"
  "fmt"
  "net/http/cookiejar"
  "net/url"
  "log"
)

func main(){
  jar, err := cookiejar.New(nil)
  if err != nil {
    log.Fatal(err)
  }
  client := &http.Client{ Jar: jar }
  res, err := client.Get("http://localhost/set_cookie")
  if err != nil {
    log.Fatal(err)
  }
  defer res.Body.Close()
  if res.StatusCode != 200 {
    fmt.Printf("StatusCode=%d\n", res.StatusCode)
    return
  }

  // Print cookie sent by server
  set_cookie_url, err := url.Parse("http://localhost/set_cookie")
  if err != nil {
    log.Fatal(err)
  }
  cookies := jar.Cookies(set_cookie_url)
  fmt.Printf("%v\n", cookies)

  // Access different url to check if cookie is sent 
  res, err = client.Get("http://localhost/dump_cookie")
  if err != nil {
    log.Fatal(err)
  }
  if res.StatusCode != 200 {
    fmt.Printf("StatusCode=%d\n", res.StatusCode)
    return
  }
}

以下是服务器端示例代码,用于对来自上述示例代码的请求发送带有set-cookie头的响应。

package main

import (
  "fmt"
  "net/http"
  "log"
)

func setCookieHandler(w http.ResponseWriter, r *http.Request){
  http.SetCookie(w, &http.Cookie{
    Name: "cookie_field",
    Value: "cookie_value",
    Path: "/",
  })
  http.SetCookie(w, &http.Cookie{
    Name: "cookie_field2",
    Value: "cookie_value2",
    Path: "/",
  })
  w.WriteHeader(http.StatusOK)
}

func dumpCookieHandler(w http.ResponseWriter, r *http.Request){
  for k, v := range r.Header {
    fmt.Printf("%s:%s\n", k, v)
  }
  w.WriteHeader(http.StatusOK)
}

func main(){
  http.HandleFunc("/set_cookie", setCookieHandler)
  http.HandleFunc("/dump_cookie", dumpCookieHandler)
  log.Fatal(http.ListenAndServe(":80", nil))
}

广告
将在 10 秒后关闭
bannerAds