La différence entre la soumission des données à d'autres formes et votre cas est que vous devrez d'abord obtenir le jeton CSRF. Cela peut être fait en effectuant une requête GET sur la page d'abord, puis en analysant le csrfmiddlewaretoken
en utilisant un analyseur approprié.
Gardez également à l'esprit que vous devrez installer un cookie-jar pour que cela fonctionne.
Par exemple:
#!/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()
J'ai essayé votre code ci-dessus, mais je reçois l'erreur suivante (dans le code HTML) S'il vous plaît connecter à nouveau, parce que votre session a expiré. Savez-vous comment maintenir la session en vie? (Je l'ai essayé avec localhost: 8000/admin) – abrunet
Ajoutez 'opener.addheaders = [('Referer', login_url)]'. Au moins certains déploiements Django nécessiteront un en-tête _Referer_ selon [cette réponse] (http://stackoverflow.com/questions/5082128/how-do-i-authenticate-a-urllib2-script-in-order-to-access -https-web-services-fro) – nmgeek