我构造了一个简单的脚本放在网站上,并在上面做了一些事情(在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)进行了一些调用。当我试图打印出饼干时,什么也没有打印出来。
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)
}
}发布于 2019-11-25 18:19:41
默认情况下,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中找到:
我希望这能为您节省一些时间:)
https://stackoverflow.com/questions/59013649
复制相似问题