La differenza tra la presentazione dei dati ad altre forme e il vostro caso è che si dovrà ottenere prima il token CSRF. Questo può essere fatto eseguendo prima una richiesta GET sulla pagina e poi analizzando lo csrfmiddlewaretoken
usando un parser adatto.
Ricorda inoltre che è necessario installare un contenitore di biscotti per farlo funzionare.
Ad esempio:
#!/usr/bin/python
import urllib, urllib2, cookielib
from BeautifulSoup import BeautifulSoup
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
url = urllib2.urlopen('http://localhost:8000/accounts/login/')
html = url.read()
doc = BeautifulSoup(html)
csrf_input = doc.find(attrs = dict(name = 'csrfmiddlewaretoken'))
csrf_token = csrf_input['value']
params = urllib.urlencode(dict(username = 'foo', password='top_secret',
csrfmiddlewaretoken = csrf_token))
url = urllib2.urlopen('http://localhost:8000/accounts/login/', params)
print url.read()
fonte
2010-09-02 05:49:52
Ho cercato il tuo codice di cui sopra, ma ottengo il seguente errore (in html) Si prega di accedere nuovamente, perché la sessione è scaduta. Sai come mantenere viva la sessione? (L'ho provato con localhost: 8000/admin) – abrunet
Aggiungi 'opener.addheaders = [('Referer', login_url)]'. Almeno alcune distribuzioni di Django richiedono un'intestazione _Referer_ come per [questa risposta] (http://stackoverflow.com/questions/5082128/how-do-i-autenticate-a-urllib2-script-in-order-to-access -https-web-services-fro) – nmgeek