Go 无法从cookiejar获取Cookie

Go 无法从cookiejar获取Cookie,go,Go,我已经在网站上构建了一个简单的脚本,并在上面做了一些事情(在lego.com上自动完成结账过程) 这一切都是使用go http客户端完成的,上面有一个cookiejar,但是当我在站点上完成所有活动后尝试打印cookie时,没有打印任何内容-不确定我是否在这里做错了什么 type Program struct { taskInfo task.Task client http.Client jar *cookiejar.Jar // Task Spec

我已经在网站上构建了一个简单的脚本,并在上面做了一些事情(在lego.com上自动完成结账过程)

这一切都是使用go http客户端完成的,上面有一个cookiejar,但是当我在站点上完成所有活动后尝试打印cookie时,没有打印任何内容-不确定我是否在这里做错了什么

type Program struct {
    taskInfo task.Task
    client   http.Client
    jar      *cookiejar.Jar
    // Task Specific Variables
    maxOrderQty   string
    sessionID     string
    sku           string
    shipMethodUID string
}
HTTP客户端在下面初始化

func (pr *Program) initializeClient() {
    pr.jar, _ = cookiejar.New(nil)

    pr.client = http.Client{
        Timeout: time.Second * 10,
        Jar:     pr.jar,
    }
}
之后,我使用所述客户端对同一域进行了几个调用(GET和POST的混合)。当我试着打印饼干时,什么也打印不出来

func (pr *Program) getSessionCookies() {
    log.Debug("Getting Cookies")
    u, _ := url.Parse("https://www.lego.com/")
    for _, cookie := range pr.jar.Cookies(u) {
        fmt.Printf("  %s: %s\n", cookie.Name, cookie.Value)
    }
}

默认情况下,Go的http包支持重定向,但必须刷新cookie jar,特别是在域发生更改时

不久前我花了大量时间调试它,我找到的解决方案是指定一个重定向处理程序:

client.CheckRedirect = getRedirectHandler(req, &client)
其代码如下:

func getRedirectHandler(req *Request, client *http.Client) redirectHandler {
    fn := func(request *http.Request, via []*http.Request) error {
        if req.FollowRedirect {
            log.Debug(fmt.Sprintf("Redirecting to %s", request.URL.String()))
            jar, err := getCookieJarWithURL(request.URL.String(), req.Cookies)
            if err != nil {
                return err
            }
            client.Jar = jar
            return nil
        }
        return errors.New("Redirect not allowed")
    }
    return fn
}
完整代码可在以下内容中找到:


我希望这能为您节省一些时间:)

要获得答案,您可能需要提供足够的代码来复制问题(例如,这给了我两个cookie)。也许可以尝试添加AllCookies()函数(如果cookies不在您期望的域中)。cookies的路径可能与“/”不同,并且不会为“/”显示。基本上没有可靠的方法可以窥视net/http/cookiejar,除非您确切知道要查找什么。net/http/cookiejar中有替换项,允许您迭代存储的所有cookie,但net/http/cookiejar不允许这样做。