Sto usando Python 3 per uno script che monitorerà gli aggiornamenti nel profilo di un utente su una pagina web. L'accesso a questo sito è protetto dalle contromisure CSRF, che è una buona cosa. Tuttavia, non riesco a ottenere il mio script per accedere a questo sito.Accesso a un sito Web tramite Python: come gestire CSRF?
Il mio approccio con
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))
Il mio approccio con
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))
In entrambi i casi io alla fine con uno stato HTTP 403
e un messaggio dicendo CSRF verification failed. Request aborted.
- Qualche idea su come risolvere questo problema?
- Il modulo in questione ha un input nascosto contenente un token CSRF. Credo che
mechanicalsoup
erobobrowser
invieranno anche questo input. Ho ragione? O devo trattarlo in modo speciale? - Pensavo che la sessione utilizzata da questi due pacchetti gestisse tutto come i cookie e così via. C'è qualcosa che ho perso?
Grazie, lavora per me. – guoqiao