[英]How do I set the content-type for POST requests in python-requests library?
[英]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 令牌?
您可以將 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)
如果您正在使用帶有CsrfMiddleware
的最新 Django, CsrfMiddleware
添加到post_data
字典:
post_data = {'email': email, 'answer': answer, 'csrfmiddlewaretoken': 'yourtoken'}
檢查表單變量名是否正確。
如果要在同一台服務器上重定向,只需調用其他視圖函數即可。
查看官方文檔,其中包括使用 CSRF 令牌發送 POST 請求。
CSRF 令牌存儲在 cookie 中(據我所知)。 既然如此,您可以將 cookie 值存儲為某個變量,然后在您的請求中使用該值。
另一種解決方法是使用csrf_exempt
裝飾器。 https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt
我建議您使用請求庫的會話對象。
此外,如果您向同一主機發出多個請求,底層 TCP 連接將被重用,這會導致性能顯着提升,並且 Session 對象具有主請求 API 的所有方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.