Django使用请求模块提交表单,CSRF验证失败

时间:2016-09-14 12:44:21

标签: python django python-2.7 django-forms request

我正在尝试使用Python请求模块提交一个django应用程序的形式,但是它给了我以下错误

  

错误代码:403
  消息:CSRF验证失败。请求中止。

我尝试使用json.dumps()转换in JSON并发送请求,但是我收到同样的错误。

我不确定,缺少什么。当我使用UI提交表单时,它运行良好。我也使用Postman插件拦截了请求,我的表单也是一样。

import requests
session = requests.session()
session.get("http://localhost:8000/autoflex/addresult/")
csrf_token = session.cookies["csrftoken"]

print csrf_token

cookie = "csrftoken=%s" % csrf_token
headers = {"Content-Type": "Application/x-www-form-urlencoded",
           "Cookie": cookie,
           "Accept-Encoding": "gzip, deflate",
           "Connection": "keep-alive",
           "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
           "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",
           "Referer": "http://localhost:8000/autoflex/addresult/"}

data = {"xml_url": xml_url, "csrfmiddlewaretoken": csrf_token}
result = session.post("http://localhost:8000/autoflex/addresult/", data=data, headers=headers)
print result.request.body
print result.request.headers
print(result.status_code, result.reason, result.content)

1 个答案:

答案 0 :(得分:0)

我在标题中提供了其他参数,我认为这是在创建问题。我删除了所有其他参数,只保留了引用者,现在它正在工作。

import requests
session = requests.session()
session.get("http://localhost:8000/autoflex/addresult/")
csrf_token = session.cookies["csrftoken"]

data = {"xml_url": xml_url, "csrfmiddlewaretoken": csrf_token}
result = session.post("http://localhost:8000/autoflex/addresult/", data=data, headers={"Referer": "http://localhost:8000/autoflex/addresult/"})
print result.request.body
print result.request.headers
print(result.status_code, result.reason, result.content)