Как получить CSRF ключ (токен)?
Как получить CSRF токен с сайта https://fix-price.ru/personal/ для парсинга данных из личного кабинета?
import requests
from bs4 import BeautifulSoup
import fake_useragent
HOST = 'https://fix-price.ru/'
link = 'https://fix-price.ru/ajax/auth_user.php'
HEADERS = {
'accept': 'application/json, text/javascript, */*; q=0.01',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'referer': 'https://fix-price.ru/personal/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
'x-kl-ajax-request': 'Ajax_Request'
}
# session = requests.Session()
# resp = session.get(link, headers=HEADERS)
# soup = BeautifulSoup(resp.text, 'lxml')
# csrf = soup.find('input', {'name': 'csrfToken'})
client = requests.Session()
html = client.get(link)
soup = BeautifulSoup(html.text, 'lxml')
# soup = BeautifulSoup(client.get(link).text, "html.parser")
csrf = soup.find('input', {'name': 'csrfToken'})
data = {
'AUTH_FORM': 'Y',
'TYPE': 'AUTH',
'backurl': '/personal/',
'auth_method': 'phone',
'login': '*****',
'password': '*****',
'CSRF': csrf
}
session = requests.Session()
user = fake_useragent.UserAgent().random
header = {
'user-agent': user
}
response = session.post(link, data=data, headers=header).text
Ответы (1 шт):
Автор решения: Jack_oS
→ Ссылка
Обновите заголовок сессии requests, а csrf найдете в value:
import requests
from bs4 import BeautifulSoup
url = 'https://fix-price.ru/personal/'
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'}
session = requests.Session()
session.headers.update(headers)
r = session.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
csrf = soup.find('input', {'name': 'CSRF'})['value']
теперь в csrf - строка с токеном:
>>> csrf
'de59e151cbbc004f009c32e6436c3e05fee6fb365778a5ed43ff5ccf9fd6f31b'
И потом, используя эту же сессию, отправите post для авторизации:
как-то так:
url_auth = 'https://fix-price.ru/ajax/auth_user.php'
phone = '+7 (123) 456-78-90'
password = 'qwerty'
payload = {
'AUTH_FORM': 'Y',
'TYPE': 'AUTH',
'CSRF': csrf,
'backurl': '/personal/',
'auth_method': 'phone',
'login': phone,
'password': password
}
r = session.post(url_auth, data=payload)

