scrapy参数-COOKIES_ENABLED 最权威解释, 帮你避坑

scrapy参数-COOKIES_ENABLED

 

当COOKIES_ENABLED是注释的时候scrapy默认没有开启cookie

当COOKIES_ENABLED没有注释,设置为False的时候scrapy默认使用了settings里面的cookie

当COOKIES_ENABLED设置为True的时候scrapy就会把settings的cookie关掉,使用自定义cookie

也就是

如果使用自定义cookie就把COOKIES_ENABLED设置为True

如果使用settings的cookie就把COOKIES_ENABLED设置为False

这里先给出我经过抓包测试,阅读源码等最终结论
0. scrapy 中 Requests 类,可以使用 cookies 和 headers 两种方法添加 cookie ,

  1. COOKIES_ENABLED 默认为 True,注释掉 COOKIES_ENABLED 即使用默认值

  2. COOKIES_ENABLED = True 时:

    1. scrapy 启动 CookiesMiddleware 中间件,为请求自动添加服务器响应的 cookie,

    2. 如果我们在 Request 中,使用 cookies 参数添加 cookie 时, 我们添加的 cookie 会额外加入到请求头中,如果响应有重名设置,则覆盖。(即,cookies 参数的cookie优先,但是 response 里的 cookie 也一个不少)

    3. 如果我们使用 headers 参数添加 cookie,headers添加的 cookie 会失效,被响应 cookie 完全覆盖。(即,headers里设置的 cookie 无效)

  3. COOKIES_ENABLED = False 时:

    1. scrapy 关闭 CookiesMiddleware 中间件,response 设置的 cookie 失效

    2. 使用 cookies 设置的 cookie 失效。

    3. 使用 headers 设置的 cookie 保留。

如果不太明白,那么从使用情景解释:

  1. 如果不想要任何 cookie,COOKIES_ENABLED = False, headers 里不要添加 cookie

  2. 想要自动设置全部的 cookie,或者在全部的cookie基础上进行部分更改, COOKIES_ENABLED = True,用cookies参数调整 cookie 设置

  3. 想要只用自己定义的 cookie,COOKIES_ENABLED=False,使用 headers 设置 cookie

posted @ 2021-09-09 15:31  子彦  阅读(388)  评论(1编辑  收藏  举报