2016-04-06 25 views
6

Varsayılan Scrapy tanımlama bilgisi seçeneğini devre dışı bıraktım, böylece manuel olarak ayarlamam gerekiyor.Çerez cevabından nasıl çerez alınır ve çerezi bir sonraki isteğe göre ayarlar?

COOKIES_ENABLED = False 
COOKIES_DEBUG = True 

Şimdi, aynı sitenin yanıtı olarak alınan değerle çerez ayarlamanız gerekiyor. Ben

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

şimdi ben Yani ben herhangi ayarlamanız gerekir cookie.Do set olamazdı

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) 

. 
. 
. 

form isteğine ayarlamak çalışıyorum, aşağıda çerez almak mümkün olabilir diğer değer de ya da sorun ne olabilir?

cevap

1

Bunu devre dışı bıraktığınızda çerezlerle çalışamazsınız.

2

Çerezler bağımsız değişkeni, yalnızca CookiesMiddleware'in işlediği için COOKIES_ENABLED öğesi true olarak ayarlanmışsa çalışır.

Dolayısıyla başlıklarını elle ayarlamak zorunda:

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)