J'utilise Python 3 pour un script qui surveille les mises à jour du profil d'un utilisateur sur une page Web. La connexion à ce site est protégée par des contre-mesures CSRF, ce qui est une bonne chose. Cependant, je ne peux pas obtenir mon script pour me connecter à ce site.Connectez-vous à un site Web via Python - comment faire face à CSRF?
Mon approche à l'aide
mechanicalsoup
:import mechanicalsoup browser = mechanicalsoup.Browser() login_page = browser.get(base_url) login_form = login_page.soup.select(".form-signin")[0] login_form.find(attrs={"name": "username"})['value'] = 'username' login_form.find(attrs={"name": "password"})['value'] = 'password' page2 = browser.submit(login_form, login_url) print(str(page2.text))
Mon approche à l'aide
robobrowser
:import re from robobrowser import RoboBrowser browser = RoboBrowser(history=True) browser.open(base_url) form = browser.get_form(action='/login/') form["username"] = 'username' form["password"] = 'password' browser.submit_form(form) print(str(browser.select))
Dans les deux cas, je finis avec un état HTTP 403
et un message dire CSRF verification failed. Request aborted.
- Des idées pour résoudre ce problème?
- Le formulaire en question a une entrée masquée contenant un jeton CSRF. Je suppose que
mechanicalsoup
etrobobrowser
soumettra également cette entrée. Ai-je raison? Ou dois-je le traiter spécialement? - Je pensais que la session utilisée par ces deux paquets gérerait tout comme les cookies et ainsi de suite. Y a-t-il quelque chose que j'ai manqué?
Merci, ça marche pour moi. – guoqiao