gpt4 book ai didi

python - 尝试连接到本地主机时出现涉及 CSRF 的 403 错误(python 请求)

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:24 24 4
gpt4 key购买 nike

我正在尝试使用 Python 的 requests 库测试与我的一个 Django View 的连接。当我尝试对其发出 POST 请求时,我在查看 request.text 时收到信息,告诉我 CSRF 验证失败,并且我在提交表单时需要 CSRF token 。我在这里做了更多研究,并尽了最大努力

这是我现在的代码:

post_request = requests.session()
post_request.get('http://127.0.0.1:8000/message/')
csrftoken = post_request.cookies['csrftoken']

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}
final_request = post_request.post('http://127.0.0.1:8000/message/', headers=dict(Referer=post_request))

这是我的观点:

def add_message(request):
form = InputInfoForm(request.POST)

if request.method == 'POST':
return HttpResponse('hey')

return HttpResponse('test')

那么如何使用请求在 View 中验证 CSRF token 呢?

最佳答案

您的代码存在以下问题。Django 希望您的 cookie 中包含 CSRFTOKEN,但也必须为您的发布参数提供一个名称为 csrfmiddlewaretoken 的发布数据。所以,使用 python 请求方法,

post_request = requests.session()
post_request.get('http://127.0.0.1:8000/message/')
csrftoken = post_request.cookies['csrftoken']
#now the csrftoken cookie is stored in csrftoken
final_request = post_request.post('http://127.0.0.1:8000/message/', data = {'csrfmiddlewaretoken' : csrftoken}, cookies=post_request.cookies) #assuming the post data for your form is empty, else add in the 'data' dictionary. just check your 'InputInfoForm' form for any fields.
final_request.text #will read you the data returned from the view, in your case "hey"

在您看来,进行以下更改,

from django.shortcuts import render  #needed
def add_message(request):
form = InputInfoForm(request.POST)

if request.method == 'POST':
return HttpResponse('hey')

return render(request, 'test.html') #assuming no context...

在您的应用程序文件夹中,添加一个"template"文件夹并在模板中创建“test.html”文件。然后添加以下内容

<form method="POST" action="{% url 'message:test'%}">{%csrf_token%}</form>

然后在项目文件夹的urls.py里面,添加

from django.conf.urls import url, include
urlpatterns = [
#admin_page --snip--
url(r'^message/', include('APPNAME.urls', namespace='message')),
]

然后在您的应用程序文件夹中,创建一个“urls.py”文件并添加以下内容...

from .views import add_message #your view
from django.conf.urls import url

app_name = "APP_NAME" #from django2.0 on wards
urlpatterns = [
url(r'^$', add_message, name='test'),
]

那么你就可以开始了。通过运行上面的 python 代码进行检查。

关于python - 尝试连接到本地主机时出现涉及 CSRF 的 403 错误(python 请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48876511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com