如何使用 python-requests 库传递 CSRF 令牌?
How do I pass a CSRF token using the python-requests library?
我有一个应用程序需要使用一些 POST 数据从外部重定向到另一个 url。我有另一个应用程序的 CSRF 令牌值。如何使用 Python 中的请求库构造一个简单的 POST 请求??
csrf_token = "kjsbfckjsdnfcksdnkl"
post_data = {'email': email, 'answer': answer}
response = request.post(URL, data=post_data)
在哪里添加 CSRF 令牌?
如果您使用的是最近的 Django CsrfMiddleware
,请将其添加到 post_data
字典中:
post_data = {'email': email, 'answer': answer, 'csrfmiddlewaretoken': 'yourtoken'}
检查表格变量名是否正确。
如果你想在同一台服务器上重定向,只需调用其他视图函数即可。
看看官方文档,which covers sending a POST request with a CSRF token。
CSRF 令牌存储在 cookie 中(据我所知)。既然如此,您可以将 cookie 值存储为某个变量,然后在您的请求中使用该值。
您可以将 CSRF 令牌作为 POST 参数 或 HTTP header 发送。
编辑: Django 的 CSRF 保护也需要一个 Referer HTTP header。它需要与请求具有相同的来源。
使用POST参数:
post_data = {'email': email, 'answer': answer, 'csrftoken': crsf_token_value}
headers = {'Referer': URL}
response = request.post(URL, data=post_data, headers=headers)
使用 HTTP headers:
post_data = {'email': email, 'answer': answer}
headers = {'X-CSRFToken': csrf_token_value, 'Referer': URL}
response = request.post(URL, data=post_data, headers=headers)
另一种解决方法是使用 csrf_exempt
装饰器。
https://docs.djangoproject.com/en/3.2/ref/csrf/#django.views.decorators.csrf.csrf_exempt.
我建议你使用请求库的会话对象。
此外,如果您向同一主机发出多个请求,底层的 TCP 连接将被重用,这可能会显着提高性能,并且 Session 对象具有主要请求的所有方法API.
我有一个应用程序需要使用一些 POST 数据从外部重定向到另一个 url。我有另一个应用程序的 CSRF 令牌值。如何使用 Python 中的请求库构造一个简单的 POST 请求??
csrf_token = "kjsbfckjsdnfcksdnkl"
post_data = {'email': email, 'answer': answer}
response = request.post(URL, data=post_data)
在哪里添加 CSRF 令牌?
如果您使用的是最近的 Django CsrfMiddleware
,请将其添加到 post_data
字典中:
post_data = {'email': email, 'answer': answer, 'csrfmiddlewaretoken': 'yourtoken'}
检查表格变量名是否正确。
如果你想在同一台服务器上重定向,只需调用其他视图函数即可。
看看官方文档,which covers sending a POST request with a CSRF token。
CSRF 令牌存储在 cookie 中(据我所知)。既然如此,您可以将 cookie 值存储为某个变量,然后在您的请求中使用该值。
您可以将 CSRF 令牌作为 POST 参数 或 HTTP header 发送。
编辑: Django 的 CSRF 保护也需要一个 Referer HTTP header。它需要与请求具有相同的来源。
使用POST参数:
post_data = {'email': email, 'answer': answer, 'csrftoken': crsf_token_value}
headers = {'Referer': URL}
response = request.post(URL, data=post_data, headers=headers)
使用 HTTP headers:
post_data = {'email': email, 'answer': answer}
headers = {'X-CSRFToken': csrf_token_value, 'Referer': URL}
response = request.post(URL, data=post_data, headers=headers)
另一种解决方法是使用 csrf_exempt
装饰器。
https://docs.djangoproject.com/en/3.2/ref/csrf/#django.views.decorators.csrf.csrf_exempt.
我建议你使用请求库的会话对象。
此外,如果您向同一主机发出多个请求,底层的 TCP 连接将被重用,这可能会显着提高性能,并且 Session 对象具有主要请求的所有方法API.