5

Ich habe ein Problem mit einfachen Autorisierung und Upload-API-Skript.Python-Anfragen behandeln Cookies nicht korrekt?

Bei Genehmigung erhält der Client mehrere Cookies, einschließlich PHPSESSID-Cookie (im Browser).

Ich benutze requests.post Methode mit Formulardaten für die Zulassung:

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

Headers für benutzerdefinierte verwendet werden User-Agent nur.

Die Autorisierung ist 100% in Ordnung (auf der Seite gibt es einen Abmeldelink). Später, ich versuche, Daten zu laden, die autorisierten Session-Cookies verwenden:

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

Aber Website lehnt den Antrag ab. Wenn wir die Anfragen von Skript und Google Chrome (mit Wireshark) vergleichen, gibt es keine Unterschiede im Anfragetext.

Der einzige Unterschied ist, dass Cookies durch Anfragen Klasse geschickt, während Google Chrome sendet.

Aktualisieren: Doppelt überprüft, erste Anforderung erhält 7 Cookies. Post-Methode einfach ignorieren Hälfte ...

+1

Mir sind keine Cookie-Probleme mit "Anfragen", nein bekannt. Wie viele Cookies werden bei Verwendung einer Chrome Incognito-Registerkarte * bei der ersten Anfrage an die Site * gesetzt? Die Site könnte das Verhalten basierend auf dem Benutzeragenten oder anderen Anforderungsheadern sehr gut ändern. Sind Sie sicher, dass die Seite kein CSRF-Token verwendet, das in das Anmeldeformular eingebettet ist? –

+0

Als nächstes, was ist das Ablaufdatum der Cookies? Gibt es bestimmte Flags für diese Cookies? Was passiert, wenn Sie ein 'requests.Session()' Objekt verwenden, um die Cookies zu verwalten? –

+0

@MartijnPieters mein schlechtes, ich habe die Fehler behoben. Ich habe keine Erfahrung mit dem 'Session'-Kurs, guter Rat für die Zukunft! – Croll

Antwort

2

Mein Fehler in Code war, dass ich war Zuordnung Cookies von jeder nächsten API-Anfrage an die Sitzung Cookies Wörterbuch. Bei jeder Anfrage seit der Anmeldung wurden Cookies durch anstehende Antwort-Cookies zurückgesetzt, das war das Problem. Da Authentifizierungs-Cookies nur bei der Anmeldung zugewiesen werden, gingen sie bei der nächsten Anfrage verloren.

Nach jeder autorisierten Anfrage verwende ich update(), nicht zuweisen.

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

Löst mein Problem, Upload funktioniert gut!

+1

Sie sollten nur eine Sitzung verwenden, damit Sie sie nicht selbst behandeln müssen –