登录
首页 >  Golang >  Go问答

Cookie jar中无法检索到cookie

来源:stackoverflow

时间:2024-03-04 12:09:27 253浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《Cookie jar中无法检索到cookie》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我构建了一个简单的脚本,该脚本可以在网站上运行,并在那里执行一些操作(在lego.com上自动执行结帐过程)

这一切都是使用带有 cookiejar 的 go http 客户端完成的,但是当我在网站上的所有活动结束后尝试打印 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 的混合)进行了几次调用。当我尝试打印 cookie 时,没有打印任何内容。

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
}

完整代码可以在这个gist中找到:

我希望这可以节省您一些时间:)

今天关于《Cookie jar中无法检索到cookie》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>