5

Tôi gặp sự cố với ủy quyền đơn giản và tải lên tập lệnh API.Yêu cầu của python không xử lý đúng cookie?

Khi được ủy quyền, ứng dụng khách sẽ nhận được một số cookie, bao gồm cookie PHPSESSID (trong trình duyệt).

tôi sử dụng phương pháp requests.post với dữ liệu mẫu cho phép:

r = requests.post(url, headers = self.headers, data = formData) 
self.cookies = requests.utils.dict_from_cookieja(r.cookies) 

Headers được sử dụng để tùy chỉnh User-Agent chỉ.

Ủy quyền là 100% tiền phạt (có liên kết đăng xuất trên trang). Sau đó, tôi cố gắng để tải lên dữ liệu bằng cách sử dụng các tập tin cookie phiên ủy quyền:

r = requests.post(url, files = files, data = formData, headers = self.headers, cookies = self.cookies) 

Nhưng trang web từ chối yêu cầu. Nếu chúng ta so sánh các yêu cầu từ tập lệnh và google chrome (sử dụng Wireshark), thì không có sự khác biệt trong phần thân yêu cầu.

Chỉ khác biệt là cookie được gửi theo lớp yêu cầu, trong khi google chrome gửi .

Cập nhật: Đã chọn đôi, yêu cầu đầu tiên nhận được 7 cookie. phương pháp đăng chỉ cần bỏ qua một nửa ...

+1

Tôi không biết bất kỳ vấn đề về cookie nào với 'yêu cầu', không. Sử dụng tab Ẩn danh của Chrome, có bao nhiêu cookie được đặt * theo yêu cầu đầu tiên đến trang web *? Trang web có thể thay đổi rất tốt hành vi dựa trên tác nhân người dùng hoặc các tiêu đề yêu cầu khác. Tiếp theo, bạn có chắc chắn trang không sử dụng mã thông báo CSRF được nhúng với biểu mẫu đăng nhập không? –

+0

Tiếp theo, ngày hết hạn trên cookie là gì? Có các cờ cụ thể được đặt trên các cookie đó không? Điều gì sẽ xảy ra khi bạn sử dụng một đối tượng 'requests.Session()' để quản lý các cookie? –

+0

@MartijnPieters bad của tôi, tôi đã giải quyết được những sai lầm. Tôi không có thời gian sử dụng lớp 'session', lời khuyên tốt cho tương lai! – Croll

Trả lời

2

Lỗi của tôi trong mã là tôi đã gán cookie từ mỗi yêu cầu API tiếp theo cho từ điển cookie phiên. Trên mỗi yêu cầu kể từ khi đăng nhập, cookie đã được 'đặt lại' bởi các cookie phản hồi sắp tới, đó là vấn đề. Vì cookie xác thực chỉ được gán khi yêu cầu đăng nhập, chúng bị mất theo yêu cầu tiếp theo.

Sau mỗi yêu cầu được ủy quyền, tôi sử dụng cập nhật(), không chỉ định.

self.cookies.update(requests.utils.dict_from_cookiejar(r.cookies)) 

Giải quyết vấn đề của tôi, tải lên hoạt động tốt!

+1

Bạn chỉ nên sử dụng một phiên để bạn không phải tự mình xử lý chúng –

Các vấn đề liên quan