2010-09-02 18 views

Odpowiedz

13

Różnica pomiędzy złożeniem danych do innych form i sprawa jest to, że trzeba będzie najpierw uzyskać token CSRF. Można to zrobić, wykonując najpierw żądanie GET na stronie, a następnie analizując csrfmiddlewaretoken używając odpowiedniego analizatora składni.

Pamiętaj też, że musisz zainstalować słoik z plikami cookie, aby to działało.

Na przykład:

#!/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() 
+0

Próbowałem swój kod powyżej, ale pojawia się następujący komunikat o błędzie (w HTML) Proszę zalogować się ponownie, ponieważ Twoja sesja wygasła. Czy wiesz, jak utrzymać sesję? (Próbowałem go z localhost: 8000/admin) – abrunet

+0

Dodaj 'opener.addheaders = [('Referer', login_url)]'. Przynajmniej niektóre wdrożenia Django będą wymagały nagłówka _Referer_ zgodnie z [tą odpowiedzią] (http://stackoverflow.com/questions/5082128/how-do-i-authenticate-a-urllib2-script-in-order-to-access -https-web-services-fro) – nmgeek

1

użyć csrf_exempt dekorator do widoku, który jest obsługi żądania

from django.views.decorators.csrf import csrf_exempt 
Powiązane problemy