【问题标题】:Properly send https Cookie正确发送 https Cookie
【发布时间】:2021-04-22 03:57:45
【问题描述】:

我正在构建一个与其他服务器交互的小型服务。 我必须向该服务器发送一个带有会话令牌的 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`)

但没有效果

【问题讨论】:

  • 服务器发回该会话令牌。当我在浏览器中检查时 - 我正确接收到发送的 cookie
  • 没有足够的信息来确定服务器为什么没有响应 Set-Cookie 标头。代码正确发送了请求 Cookie 标头。可能 cookie 名称或值无效,或者服务器正在请求中寻找其他内容。什么是 response.StatusCode?这可能会为正在发生的事情提供线索。
  • 请求 Cookie 上的名称和值以外的设置是无意义的。
  • Hannah89,response.StatusCode 正确 - 200。

标签: go cookies https httprequest


【解决方案1】:

您的代码看起来不错,这一定是服务器的问题。即使没有发送 一个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)
}

【讨论】:

  • 在打扰服务器管理员之前,我必须 100% 确定我的代码是正确的。通过 HTTPS 发送 cookie 有什么问题吗?
猜你喜欢
  • 2021-08-08
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 2014-08-11
  • 2023-03-25
  • 2021-01-13
相关资源
最近更新 更多