2016-04-06 106 views
6

我已經禁用了默認Scrapy cookie選項,所以我必須手動設置它。如何從scrapy響應獲取cookie並將cookie設置爲下一個請求?

COOKIES_ENABLED = False 
COOKIES_DEBUG = True 

現在,我需要設置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.Do我需要設置任何其他價值還是可能是什麼問題?

回答

1

我認爲如果禁用了Cookie,您將無法使用Cookie。

2

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) 
相關問題