python-requests 和 django - CSRF 验证失败。请求已中止

2024-04-15

我有一个 django 服务器来上传文件,当我使用浏览器时,我可以毫无问题地上传文件。

但是如果我使用 python-requests 命令,它会告诉我 CSRF 验证失败。请求被中止。 python请求代码如下:

    # upload via HTTP
    file = {"docfile": open(fullfilename, "rb")}
    s = requests.Session()
    r = s.get(dhost)
    r = s.post(dhost, files=file)

如果我执行我的代码,我会得到代码403并且错误CSRF验证失败。请求被中止。失败原因给出:

CSRF 令牌丢失或不正确。

但如果我查看发送的标头,就会发现 cookie 已设置:

CaseInsensitiveDict({'Content-Length': u'84169', 
'Accept-Encoding': 'gzip, deflate, compress', 
'Accept': '*/*', 
'User-Agent': 'python-requests/2.0.1 CPython/2.7.3 Linux/3.6.11+', 
'Cookie': 'csrftoken=GOOIsG89i5oMCJO6594algTXooxoUeoL', 
'Content-Type': 'multipart/form-data; boundary=86ada00b4f6c41d5997293cce7a53b6b'})

您能告诉我应该做什么才能让它发挥作用吗?


实际上一切都很好,你只需要了解 csrf 是如何工作的。当您在浏览器中加载页面时,您会在其中获得一个 csrf 令牌{% csrf_token %},所以当你发送数据到服务器的时候,你也一起发送了csrf token。

当您使用请求时,您会在“get”部分获取 cookie,但不会将其与“post”一起发送。如果没有它,您只是发送一个根本没有令牌的 post 请求,这意味着 CSRF 验证错误。要解决这个问题,请尝试以下代码:

file = {"docfile": open(fullfilename, "rb")}
s = requests.Session()
r1 = s.get(dhost)
csrf_token = r1.cookies['csrftoken']
r2 = s.post(dhost, files=file, data={'csrfmiddlewaretoken': csrf_token}, headers=dict(Referer=dhost))

如果这仅供您自己使用,您可以使用 csrf_exampt 在该视图上禁用 csrf:

@csrf_exempt
def my_view(request):
   ...whateva...

但请注意,如果您计划启动服务器并向公众开放,则不推荐使用此解决方案

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-requests 和 django - CSRF 验证失败。请求已中止 的相关文章

随机推荐

  • 更改值结转次数的 maxgap

    我有一个类似于以下内容的数据框 library data table test lt data table data frame value c 5 NA 8 NA NA 8 6 NA NA 10 locf N c 1 NA 1 NA NA
  • google.script.run.withSuccessHandler() 返回未定义

    我使用下面提供的代码在单独的 GS 文件中创建了一个数组 我尝试在 HTML 文件中调用它 我的目标是将数组的内容与参数进行比较email 但是 返回的值google script run withSuccessHandler is und
  • 来自浏览器的带有正文的异步 GET 请求

    好吧 我知道这是一个坏主意 不应该这样做 但为了这个问题 请假设没有其他方法 我得到的 API 端点需要以空对象作为主体的 GET 请求 有没有办法从浏览器执行异步请求 我在用着axios使用的库XMLHttpRequest在引擎盖下和MD
  • 如何在Qt中暂时断开与插槽的信号?

    我用信号连接一个插槽 但现在我想暂时断开它们的连接 这是我的班级声明的一部分 class frmMain public QWidget private QTimer myReadTimer private slots void on btn
  • POST 请求(Javascript)

    如何在 Javascript 中发出简单的 POST 请求而不使用表单且不回发 虽然我从 sundeep 答案中获取代码示例 但为了完整性而将代码发布在此处 var url sample url php var params lorem i
  • 如何在 Django 1.8 中使用 jinja2 作为模板引擎

    我一直在研究如何在 django 1 8 中使用 jinja2 但是没有将 django 与 jinja2 一起使用的完整源代码 我想知道你们是否知道在 django 中使用 jinja2 的过程 我查看了官方文档并查看了以下问题 如何设置
  • 按 Option 键隐藏/显示应用程序主菜单中的菜单项

    我想在应用程序的主菜单中添加一个很少使用的菜单项 我希望它默认隐藏 仅当用户按住 Option 键时才显示 我该怎么做呢 看来我应该处理flagsChanged 但它是NSResponder的方法和NSMenu不继承自NSResponder
  • 为什么使用 boost 后 C++ 比 python 快得多?

    我的目标是用 Python 编写一个用于频谱有限元的小型库 为此我尝试使用 Boost 通过 C 库扩展 Python 希望它能让我的代码更快 class Quad public Quad int int double integrate
  • 将 TDD 与 Web 应用程序开发集成的最佳实践? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 单元测试和 ASP NET Web 应用程序在我的团队中是一个模棱两可的点 通常情况下 良好的测试实践会被忽视 Web 应用程序最终会在没有测试
  • 如何对库进行临时签名?

    尝试运行链接到动态库的可执行文件 出现以下错误 Library not loaded Reason tried
  • 为什么小于不起作用?

    这看起来很简单 但为什么这种比较不起作用呢 if nmax lt num nmax num 我把它放在一个循环中 寻找最大的数字 第一个数字是105 然后是89 然后是99 然后是一大堆大于99的数字 第一个数字是要测试的数字 第二个数字是
  • GWT:对RichTextArea进行文本限制并阻止用户输入更多字符

    我正在使用 GWT RixhText Area 并希望在 richText Area 中限制 100 个字符 现在我正在做这个 description addKeyDownHandler new KeyDownHandler Overrid
  • Elastic Beanstalk 剥离 Sec-WebSocket-Accept 标头

    我正在尝试让 NET Core 应用程序在 elastic beanstalk 上运行 以从浏览器中的 javascript 接收 websockets 连接 当我在本地计算机上测试 AWS 之外的客户端和服务器时 我能够在两者之间建立 W
  • 数据流:将 Top 模块与 Python SDK 结合使用:单元素 PCollection

    我正在查看 incubator beam 存储库上的 word counting py 示例 从数据流文档链接 我想修改它以获得n 出现次数最多的 这是我的管道 counts lines split gt gt beam ParDo Wor
  • Java中如何初始化日期类型变量?

    import java util Date Date firstDate 我不知道如何初始化firstDate例如对于你说的字符串 String line1 First line 但是日期的格式是什么 你能给我一个例子吗 以下是 Oracl
  • Python 中海量 numpy 数组的内存高效排序

    我需要使用 numpy 对非常大的基因组数据集进行排序 我有一个 26 亿个浮点数的数组 维度 868940742 3 加载后 它会占用我机器上大约 20GB 的内存 我有一台 2015 年初的 13 英寸 MacBook Pro 配备 1
  • 谷歌闭包编译器和json

    我有一个 json 字符串 我会解析它 然后使用点符号访问对象的属性 然而 在 google 闭包编译器中 点符号 MyObject PropertyName 给出该属性未定义的警告 目前 我使用的解决方案是将我的代码转换为括号表示法 My
  • Shouldly 断言库如何知道断言所应用到的表达式?

    The 适用于 NET 的 Shouldly 断言库 http shouldly readthedocs io en latest 以某种方式知道断言方法被调用的表达式 因此它能够将其显示到消息中 我试图找出它是如何工作的 但迷失在源代码中
  • spring + SQLite在多线程应用程序中

    我正在开发一个使用 SQLite 数据库和 spring 的应用程序 当多个线程尝试修改数据库时遇到问题 我收到错误 数据库文件被锁定 我配置了一个数据源
  • python-requests 和 django - CSRF 验证失败。请求已中止

    我有一个 django 服务器来上传文件 当我使用浏览器时 我可以毫无问题地上传文件 但是如果我使用 python requests 命令 它会告诉我 CSRF 验证失败 请求被中止 python请求代码如下 upload via HTTP