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 ,
-
COOKIES_ENABLED 默认为 True,注释掉 COOKIES_ENABLED 即使用默认值
-
COOKIES_ENABLED = True 时:
-
scrapy 启动 CookiesMiddleware 中间件,为请求自动添加服务器响应的 cookie,
-
如果我们在 Request 中,使用 cookies 参数添加 cookie 时, 我们添加的 cookie 会额外加入到请求头中,如果响应有重名设置,则覆盖。(即,cookies 参数的cookie优先,但是 response 里的 cookie 也一个不少)
-
如果我们使用 headers 参数添加 cookie,headers添加的 cookie 会失效,被响应 cookie 完全覆盖。(即,headers里设置的 cookie 无效)
-
-
COOKIES_ENABLED = False 时:
-
scrapy 关闭 CookiesMiddleware 中间件,response 设置的 cookie 失效
-
使用 cookies 设置的 cookie 失效。
-
使用 headers 设置的 cookie 保留。
-
如果不太明白,那么从使用情景解释:
-
如果不想要任何 cookie,COOKIES_ENABLED = False, headers 里不要添加 cookie
-
想要自动设置全部的 cookie,或者在全部的cookie基础上进行部分更改, COOKIES_ENABLED = True,用cookies参数调整 cookie 设置
-
想要只用自己定义的 cookie,COOKIES_ENABLED=False,使用 headers 设置 cookie