首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从cookiejar获取cookie

无法从cookiejar获取cookie
EN

Stack Overflow用户
提问于 2019-11-24 08:35:51
回答 1查看 377关注 0票数 0

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

这一切都是使用带有cookiejar的go http客户端完成的,但是当我试图在站点上的所有活动之后打印出cookie时,什么都没有打印出来-不确定我是否做错了什么。

代码语言:javascript
复制
type Program struct {
    taskInfo task.Task
    client   http.Client
    jar      *cookiejar.Jar
    // Task Specific Variables
    maxOrderQty   string
    sessionID     string
    sku           string
    shipMethodUID string
}

HTTP客户端在下面进行初始化

代码语言:javascript
复制
func (pr *Program) initializeClient() {
    pr.jar, _ = cookiejar.New(nil)

    pr.client = http.Client{
        Timeout: time.Second * 10,
        Jar:     pr.jar,
    }
}

在此之后,我使用所述客户端对相同的域(混合了GET和POST)进行了一些调用。当我试图打印出饼干时,什么也没有打印出来。

代码语言:javascript
复制
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)
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-11-25 18:19:41

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

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

代码语言:javascript
复制
client.CheckRedirect = getRedirectHandler(req, &client)

它的代码如下:

代码语言:javascript
复制
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中找到:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59013649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档