Go 无法从cookiejar获取Cookie
我已经在网站上构建了一个简单的脚本,并在上面做了一些事情(在lego.com上自动完成结账过程) 这一切都是使用go http客户端完成的,上面有一个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
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不允许这样做。