2016-04-06 15 views
6

Tôi đã vô hiệu hóa tùy chọn Cookie mặc định của Scrapy, để tôi phải cài đặt thủ công.Làm cách nào để nhận cookie từ phản hồi cồng kềnh và đặt cookie thành yêu cầu tiếp theo?

COOKIES_ENABLED = False 
COOKIES_DEBUG = True 

Bây giờ, tôi cần phải đặt cookie với giá trị nhận được dưới dạng phản hồi của cùng một trang web. Tôi có thể có thể nhận được các tập tin cookie như dưới đây,

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

bây giờ tôi đang cố gắng để thiết lập nó để yêu cầu hình thức bởi

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) 

. 
. 
. 

Vì vậy, tôi không thể thiết lập các cookie.Do tôi cần phải thiết lập bất kỳ giá trị khác cũng có thể hoặc những gì có thể là vấn đề?

Trả lời

1

Tôi nghĩ bạn không thể làm việc với cookie nếu bạn tắt nó.

2

Đối số cookie chỉ hoạt động nếu bạn đã đặt COOKIES_ENABLED thành True, vì CookiesMiddleware xử lý nó.

Do đó bạn phải thiết lập nó bằng tay trên các tiêu đề:

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) 
Các vấn đề liên quan