【问题标题】:How do I pass a CSRF token using the python-requests library?如何使用 python-requests 库传递 CSRF 令牌?
【发布时间】:2015-07-06 03:20:06
【问题描述】:

我有一个应用程序需要使用一些 POST 数据从外部重定向到另一个 url。我有另一个应用程序的 CSRF 令牌值。如何在 Python 中使用 requests 库构造一个简单的 POST 请求?

csrf_token = "kjsbfckjsdnfcksdnkl"
post_data = {'email': email, 'answer': answer}
response = request.post(URL, data=post_data)

在哪里添加 CSRF 令牌?

【问题讨论】:

  • 通常将它们放入 cookie 中

标签: python django csrf-protection


【解决方案1】:

【讨论】:

    【解决方案2】:

    我建议你使用请求库的会话对象。

    此外,如果您向同一主机发出多个请求,则会重用底层 TCP 连接,这会导致性能显着提高,并且 Session 对象具有主请求 API 的所有方法。

    【讨论】:

      【解决方案3】:

      您可以将 CSRF 令牌作为 POST 参数HTTP 标头 发送。

      编辑: Django 的 CSRF 保护还需要一个 Referer HTTP 标头。它需要与请求具有相同的来源。

      使用 POST 参数:

      post_data = {'email': email, 'answer': answer, 'csrftoken': crsf_token_value}
      headers = {'Referer': URL}
      response = request.post(URL, data=post_data, headers=headers)
      

      使用 HTTP 标头:

      post_data = {'email': email, 'answer': answer}
      headers = {'X-CSRFToken': csrf_token_value, 'Referer': URL}
      response = request.post(URL, data=post_data, headers=headers)
      

      【讨论】:

      • 它仍然显示禁止...推荐人检查失败...没有推荐人。
      • 您的请求需要一个与请求 URL 的域相匹配的 Referer HTTP 标头。我将编辑我的答案以添加它。
      • @DeadDjangoDjoker 我编辑了我的答案以处理 no referer 错误。
      • @aumo 建议为 csrf_token 设置一些随机值
      • @Abhinay 不,我只是复制粘贴了问题中的示例,显然,放置一些随机值是行不通的。我会更新我的答案以避免混淆,感谢您指出。
      【解决方案4】:

      查看官方文档,which covers sending a POST request with a CSRF token

      CSRF 令牌存储在 cookie 中(据我所知)。既然如此,您可以将 cookie 值存储为某个变量,然后在您的请求中使用该值。

      【讨论】:

        【解决方案5】:

        如果您使用带有 CsrfMiddleware 的最新 Django,请将其添加到 post_data 字典中:

        post_data = {'email': email, 'answer': answer, 'csrfmiddlewaretoken': 'yourtoken'}
        

        如果变量名正确,请检查表单。

        如果你想在同一服务器上重定向,只需调用其他视图函数。

        【讨论】:

          猜你喜欢
          • 2018-02-02
          • 2014-10-12
          • 2018-07-28
          • 2023-04-02
          • 2014-10-12
          • 2017-02-17
          • 2017-04-12
          • 2017-03-20
          相关资源
          最近更新 更多