簡體   English   中英

CSRF驗證在request.post()上失敗

[英]CSRF verification fails on requests.post()

無法弄清楚這一點。 CSRF驗證在我的所有Django模板視圖中均能正常工作。 在這里,我嘗試使用我在其他帖子中發現的技術從python客戶端發布帖子。 client.get(url)調用確實提供了令牌(調試器顯示,例如:client.cookies ['csrftoken'] ='POqMV69MUPzey0nyLmifBglFDfBGDuo9'),但是request.post()失敗,錯誤403,CSRF驗證失敗。 這是怎么回事?

我的Django視圖(方法中包含一些虛擬的東西):

class CameraUpload(View):
    template_name = "account/templates/upload.html"

    def get(self, request):
        dummy = VideoForm()
        return render(request, self.template_name, {'form': dummy})

    def post(self, request):
        dummy = VideoForm()
        return render(request, self.template_name, {'form': dummy})

和正在嘗試發布內容的客戶:

import requests

url = 'http://127.0.0.1:8000/account/camera_upload/'

client = requests.session()
client.get(url)
csrftoken = client.cookies['csrftoken']

payload = {
    'csrfmiddlewaretoken': csrftoken,
    'tag': '69'
}

r = requests.post(url, data=payload)

編輯:

嘗試按照此鏈接添加引薦來源,因此代碼現在如下所示:

r = requests.post(url, data=payload, headers=dict(Referer=url))

但是存在同樣的問題。

您應該將會話( client )用於帖子:

r = client.post(url, data=payload, headers=dict(Referer=url))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM