簡體   English   中英

如何從scrapy響應中獲取cookie並將cookie設置為下一個請求?

[英]How to get cookie from scrapy response and set the cookie to the next request?

我已經禁用了 Default 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)

我認為如果您禁用它,您將無法使用 cookie。

Paulo Romeira回答是正確的,只是缺少從字節到字符串的解析:

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

您還可以使用官方scrapy文檔中記錄的以下策略來使用創建cookiejars和處理cookies的概念(用於在scrapy中維護會話): https ://doc.scrapy.org/en/latest/topics/downloader -middleware.html#std:reqmeta-cookiejar

另請參閱此 stackoverflow 問題: Scrapy - 如何管理 cookie/會話

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM