首页 > 解决方案 > 正确发送 https Cookie

问题描述

我正在构建一个与其他服务器交互的小型服务。我必须向该服务器发送一个带有会话令牌的 cookie。以后用它来做我的识别。但是那个cookie没有设置。并且没有 cookie 被发回。该请求是通过 https 协议发出的。

这是代码:

// ---> create Client
client := &http.Client{}

// ---> create Request
req, err := http.NewRequest("GET", indexURL, nil)
if err != nil {
    fmt.Printf("NewRequest fail: %s\n", err)
}

// ---> define a cookie
cookie := http.Cookie{Name: "sess", Value: "value", HttpOnly: true, MaxAge: 0, Path: "/", Domain: "the.server.domain"}
req.AddCookie(&cookie)

// ---> fire in the hole!
resp, err := client.Do(req)
if err != nil {
    fmt.Printf("client.Do fail: %s\n", err)
}
defer resp.Body.Close()

// ---> read the cookies
fmt.Printf("cookies: %d\n", len(resp.Cookies())) // prints zero (((

// ---> not even launched ((
for _, cookie := range resp.Cookies() {
    fmt.Printf("GET cookie[%s] = %s\n", cookie.Name, cookie.Value)
}

我做错了什么?

我也试过

req.Header.Set(`Cookie`, `sess=value`)

但没有效果

标签: gocookieshttpshttprequest

解决方案


您的代码看起来不错,这一定是服务器的问题。即使不发送 cookie,我也可以取回 cookie:

package main
import "net/http"

func main() {
   r, e := http.Get("https://stackoverflow.com")
   if e != nil {
      panic(e)
   }
   defer r.Body.Close()
   c := r.Cookies()
   println(len(c) == 1)
}

推荐阅读