【问题标题】:Golang http.PostParam not showing all Cookies in the ResponseGolang http.PostParam 未在响应中显示所有 Cookie
【发布时间】:2018-07-25 21:41:19
【问题描述】:

我正在学习 Golang,我正在尝试到达一个终点(我无法控制)。

这是我写的代码:

params := url.Values{}
params.Add("data[User][username]", <THE_USERNAME>)
params.Add("data[User][password]", <THE_PASSWORD>)
resp, _ := http.PostForm(<LOGIN_URL>, params)

fmt.Println(resp.Cookies())

Println 打印出[PHPSESSID=&lt;ID&gt;; Path=/; HttpOnly]

在 Postman 中执行相同请求时

POST /login HTTP/1.1
Host: <HOST>
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 399a42af-00f2-4340-b7fa-1ae1fa295b62

<PARAM_DATA>

我可以看到在响应中设置了两个 cookie,PHPSESSID(我猜在 Golang 中是相同的)和au(这是我对服务器进行身份验证所需的令牌)。

我不确定自己做错了什么以及为什么在使用 Golang 代码调用端点时看不到 au Cookie。

你猜到了吗?

【问题讨论】:

  • 当您尝试 curl 时,您看到的内容是否与 postman 或 Go 中的相同?
  • @mkopriva 我明白了。出于某种原因,我从服务器获得了很多 PHPSESSID,但由于我无法控制服务器,我只是担心au cookie。
  • 对不起,我确实看到了和 Postman 一样的东西。当curl 处于详细模式时,我可以看到Set-Cookie: au=&lt;AUTH_TOKEN&gt;; expires=Wed, 08-Aug-2018 21:55:25 GMT; path=/
  • 如果你在 Go 中执行 log.Println(resp.Header["Set-Cookie"])au 在那里?
  • 不,它只显示2018/07/26 00:18:37 [PHPSESSID=&lt;PHP_TOKEN&gt;; path=/; HttpOnly]

标签: http go


【解决方案1】:

您可能有一个 HTTP 重定向(302 或 301)。

试试这个:

package main

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

func main() {
    params := url.Values{}
    params.Add("data[User][username]", "test")
    params.Add("data[User][password]", "test")

    client := &http.Client{
        CheckRedirect: func(req *http.Request, via []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }
    resp, err := client.PostForm("http://example.com", params)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(resp.Cookies())
}

在 net/http 包documentation 的概述中,您有一个关于如何控制重定向策略的示例。

祝你好运。

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2021-05-17
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多