python - 如何从 scrapy 响应中获取 cookie 并将 cookie 设置为下一个请求?

标签 python redirect cookies scrapy

我已经禁用了默认的 Scrapy cookie 选项,所以我必须手动设置它。

COOKIES_ENABLED = False
COOKIES_DEBUG = True

现在,我需要使用作为同一站点的响应接收到的值来设置 cookie。我可以获得如下 cookie,

cookie = response.headers.getlist('Set-Cookie')[0].split(";")[0].split("=")

现在我正在尝试将其设置为表单请求

FormRequest.from_response(response,
                formdata={"username": "asldkfs", "pass": "slskd"},
                cookies={cookie[0]:cookie[1]},
                meta = {'dont_redirect': True,'handle_httpstatus_list': [302]},
                callback=self.redirection)

def redirection(self,response): 
    self.log("redirection")
    self.log(response.headers)               
    self.log("Cookie2")
    cook1 = response.headers.getlist('Set-Cookie')[0].split(";")[0].split("=")
    self.log(cook1)        
    self.log("end cookie2")
    return Request("http://something.net/some/sa/"+response.headers.getlist('Location')[0],cookies={cook1[0]:cook1[1]},
        callback=self.check_login_response)

.
.
.

所以我无法设置 cookie。我是否还需要设置任何其他值或者可能是什么问题?

最佳答案

cookies 参数仅在您将 COOKIES_ENABLED 设置为 True 时有效,因为 CookiesMiddleware 会处理它。

因此您必须在标题上手动设置它:

cookie = response.headers.getlist('Set-Cookie')[0].split(';')[0]

FormRequest.from_response(response,
            formdata={"username": "asldkfs", "pass": "slskd"},
            headers={'Cookie': cookie}, # <---
            meta = {'dont_redirect': True,'handle_httpstatus_list': [302]},
            callback=self.redirection)

关于python - 如何从 scrapy 响应中获取 cookie 并将 cookie 设置为下一个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36443246/

相关文章:

php - 从 JavaScript 读取 PHP cookie

python:如何跟踪大型项目中的函数执行顺序

python - 如何在 python 交互式控制台中捕获 'Ctrl-D'?

wordpress - 使用 Wordpress 时如何重定向到 https?

ruby-on-rails-3 - Rails 3 中的 AbstractController::DoubleRenderError

javascript - 第二次访问用户后用 cookie 隐藏 div

python - 如何将图像的每一半放在另一半上

java - 为什么在 Android 上使用 Java/Kotlin 而不是 Python?

ruby-on-rails - 如何在 rails 中缓存通过 link_to_remote 检索到的部分?

php - Cookie 过期时间