Yui
(p)
05.Август.2021 18:16:36
#1
Для установки фотографии пользователя использую бота тг, который должен отправлять фото через post
, но сталкиваюсь с проблемой получения csrf токена, словарь попросту пустой.
def download():
URL = 'http://127.0.0.1:8000/'
URL2 = 'http://127.0.0.1:8000/admin/login/'
URL3 = 'http://127.0.0.1:8000/download-photo/'
client = requests.session()
client.get(URL)
csrftoken = client.cookies['csrftoken']
login_data = dict(csrfmiddlewaretoken=csrftoken)
files = {"FileUpload1": ("test.jpg", open("test.jpg", "rb"))}
r = client.post(URL3, files=files, data=login_data)
AlexP
(Alex P.)
05.Август.2021 18:23:32
#2
А зачем ему в куках быть? Обычно он на странице в соотв. скрытом инпуте формы и/или в какой-нибудь переменной JS.
Yui
(p)
05.Август.2021 18:32:16
#3
Скачал расширение для просмотра куков, он там был. Но еще пробовал так, но все равно ничего
client = requests.Session()
headers = {'User-Agent': 'Mozilla/5.0'}
url = 'http://127.0.0.1:8000/'
soup = BeautifulSoup(client.get(url).text, "html.parser")
csrf = soup.find(name="csrf")
print(csrf)
AlexP
(Alex P.)
05.Август.2021 18:39:53
#4
Ну тут надо для начала посмотреть что в
Yui:
client.get(url).text
Yui
(p)
05.Август.2021 18:45:45
#5
Yui:
client.get(url).text
Там спарсенная html страница
AlexP
(Alex P.)
05.Август.2021 18:53:38
#6
Так а csrf там есть?
Если да, то видимо что-то не так с парсингом. Например, не то имя поля.
Yui
(p)
05.Август.2021 18:55:46
#7
csrf там нет, я пробовал брать csrf из браузера(через расширение), но джанго все равно выдает ошибку:
Forbidden (CSRF cookie not set.): /download-photo/
AlexP
(Alex P.)
05.Август.2021 19:53:19
#8
Yui:
csrf там нет
А куда делся?)
Может просто форм нет на этой странице?
Yui
(p)
05.Август.2021 20:40:03
#9
ну его там и не было). Но все же, почему когда я указываю свой csrf токен, который у меня в браузере - все равно ошибка
AlexP
(Alex P.)
05.Август.2021 21:23:22
#10
Может не так указан, или к сессии привязан и нужны остальные куки.
А не приходит он видимо потому что
и
Cross Site Request Forgery protection | Django documentation | Django
If your view is not rendering a template containing the csrf_token template tag, Django might not set the CSRF token cookie. This is common in cases where forms are dynamically added to the page. To address this case, Django provides a view decorator which forces setting of the cookie: ensure_csrf_cookie().