5

Mam problem z prostym autoryzowaniem i przesyłaniem skryptu API.Żądania Pythona nie obsługują plików cookie poprawnie?

Po autoryzacji klient otrzymuje kilka plików cookie, w tym plik cookie PHPSESSID (w przeglądarce).

używam requests.post metodę z danych formularzy na dopuszczenie do obrotu:

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

Nagłówki są wykorzystywane wyłącznie do zwyczaju User-Agent.

Autoryzacja jest w 100% w porządku (na stronie znajduje się link wylogowania). później spróbować przesłać dane za pomocą autoryzowanych ciasteczek sesyjnych:

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

Ale strona odrzuca żądanie. Jeśli porównamy żądania skryptu i google chrome (używając Wireshark), nie ma różnic w treści żądania.

Jedyną różnicą jest to, że ciasteczka wysyłane przez klasy żądania, podczas gdy Google Chrome wysyła .

Aktualizacja: Podwójne sprawdzenie, pierwsze żądanie otrzymuje 7 plików cookie. metoda postu po prostu ignoruje połowę ...

+1

Nie jestem świadomy żadnych problemów z plikami cookie z 'request', no. Za pomocą karty Incognito w Chrome, ile plików cookie ustawiono * przy pierwszym żądaniu witryny *? Witryna może bardzo dobrze zmienić zachowanie na podstawie agenta użytkownika lub innych nagłówków żądań. Następnie, czy na pewno strona nie używa tokena CSRF osadzonego w formularzu logowania? –

+0

Następnie, jaka jest data wygaśnięcia plików cookie? Czy na tych ciasteczkach są ustawione określone flagi? Co się stanie, gdy użyjesz obiektu 'requests.Session()' do zarządzania plikami cookie? –

+0

@MartijnPieters my bad, rozwiązałem błędy. Nie mam doświadczenia z korzystaniem z klasy 'session', dobra rada na przyszłość! – Croll

Odpowiedz

2

Mój błąd w kodzie polegał na tym, że byłem przydzielając ciasteczka od każdego następnego żądania API do słownika ciasteczek sesyjnych. Po każdym zgłoszeniu od momentu zalogowania pliki cookie zostały "zresetowane" przez pliki cookie dotyczące nadchodzących odpowiedzi, to był problem. Ponieważ pliki cookie auth są przypisywane tylko na żądanie logowania, zostały utracone podczas następnego żądania.

Po każdym autoryzowanym zgłoszeniu używam aktualizacji (), nie przypisuję.

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

Rozwiązuje mój problem, ładowanie działa poprawnie!

+1

Powinieneś po prostu używać sesji, więc nie musisz ich obsługiwać samemu –

Powiązane problemy