2010-09-02 14 views

Respuesta

13

La diferencia entre el envío de datos a otras formas y su caso es que usted tendrá que obtener primero el token CSRF. Esto se puede hacer realizando una solicitud GET en la página primero y luego analizando el csrfmiddlewaretoken usando un analizador adecuado.

Además, tenga en cuenta que deberá instalar un contenedor de cookies para que funcione.

Por ejemplo:

#!/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

Me trataron el código anterior, pero me sale el siguiente error (en el HTML) Por favor, inicie sesión de nuevo, debido a que su sesión ha expirado. ¿Sabes cómo mantener viva la sesión? (Lo intenté con localhost: 8000/admin) – abrunet

+0

Agregue 'opener.addheaders = [('Referer', login_url)]'. Al menos algunas implementaciones de Django requerirán un encabezado _Referer_ según [esta respuesta] (http://stackoverflow.com/questions/5082128/how-do-i-authenticate-a-urllib2-script-in-order-to-access -https-web-services-fro) – nmgeek

1

usar el decorador csrf_exempt para la vista que está manejando la solicitud

from django.views.decorators.csrf import csrf_exempt 
Cuestiones relacionadas