jurikolo
[ОРДА] Рекрут
могущество: 1992
длань судьбы
мужчина Иван
109 уровня
Tiendil
Спасибо, путём проб и ошибок обнаружил, что сессия, которую я получаю из скрипта негодится для POST запросов, только на GET'ы получаю информацию. Если же подставить sessionid + csrf-token, полученный в браузере, то всё пучком. Буду дальше ковырять, хотя для временного решения и сессия длиною в год сгодится.
CrazyNiger
[DRAGO] Магистр
могущество: 9733
длань судьбы
мужчина Злобный Дракон
260 уровня
jurikolo
Tiendil
Спасибо, путём проб и ошибок обнаружил, что сессия, которую я получаю из скрипта негодится для POST запросов, только на GET'ы получаю информацию. Если же подставить sessionid + csrf-token, полученный в браузере, то всё пучком. Буду дальше ковырять, хотя для временного решения и сессия длиною в год сгодится.
очень странно, все должно подходить. а точно для пост запросов используется правильный csrf-токен?
Если правильно помню, то в процессе авторизации в какой то момент происходит смена то ли токена, то ли сессии.



Сообщение изменено
jurikolo
[ОРДА] Рекрут
могущество: 1992
длань судьбы
мужчина Иван
109 уровня
CrazyNiger
Спасибо, наконец нашёл источник проблемы - CSRF токен генерируется при каждом запросе новый, при этом в заголовок или тело запроса я подставляю значение из предыдущего запроса. Пойду курить документацию requests, чтобы понять, как послать одно и то же значение в обоих случаях.
CrazyNiger
[DRAGO] Магистр
могущество: 9733
длань судьбы
мужчина Злобный Дракон
260 уровня
jurikolo
при этом в заголовок или тело запроса
А в тело запроса, это куда? Токен надо передавать в куке и в заголовке x-csrftoken.

И токен во все запросы передаете? Если не передать токен в GET-запрос, то сервер сгенерирует для сессии новый токен.
jurikolo
[ОРДА] Рекрут
могущество: 1992
длань судьбы
мужчина Иван
109 уровня
CrazyNiger
в GET'ы передаю только куки, этого достаточно. Когда искал проблему, исключал геты вообще, сразу после авторизации посылал POST запрос, получал в ответе переадресацию на авторизацию.

Касаемо CSRF'а, в документации написано, что его можно передавать помимо куки либо в заголовке (X-CSRFToken), либо в теле (csrfmiddlewaretoken). Сейчас из-за недостатка времени хочу запустить рабочую версию с передаваемой сессией, а потом уже переделаю на нормальную авторизацию. Слишком много времени потратил, чую решение лёгкое, но ко мне оно ещё не пришло. (=
jurikolo
[ОРДА] Рекрут
могущество: 1992
длань судьбы
мужчина Иван
109 уровня
Не разобравшись с правильной авторизацией для POST запросов я запилил автоматическое использование карт "Регенерация" и "Снова в путь" с использованием AWS Lambda и CloudWatch используя идентификатор сессии из браузера. По умолчанию скрипт дёргается раз в 5 минут, уже несколько дней бежит и герой стал более продуктивным.

Исходный код: https://github.com/jurikolo/talekeepalive
Антипат
[LjUA] Офицер
могущество: 2241
длань судьбы
орк Ширагар
128 уровня
https://docs.the-tale.org/ru/stable/external_api/methods.html#id14
Немного не понял, какой параметр нужно передавать в запрос /game/cards/api/use? Потому что я передаю параметр card со значением uid карты. Он мне возвращает: "У Вас нет такой карты"...
CrazyNiger
[DRAGO] Магистр
могущество: 9733
длань судьбы
мужчина Злобный Дракон
260 уровня
Антипат
https://docs.the-tale.org/ru/stable/external_api/methods.html#id14
Немного не понял, какой параметр нужно передавать в запрос /game/cards/api/use? Потому что я передаю параметр card со значением uid карты. Он мне возвращает: "У Вас нет такой карты"...
А карта точно есть? или может потерялся & после карты и до других параметров запроса?

Вот с таким запросом все работает:

{
host: 'the-tale.org',
path: '/game/cards/api/use?api_client=CrazyNigerTest-0.1.0&api_version=2.0&card=a01856de793845a893316c378d950d0b',
method: 'POST',
headers: {
Referer: 'https://the-tale.org',
Cookie: '...',
'x-csrftoken': '...',
'content-type': 'application/x-www-form-urlencoded',
'content-length': 18
}
}

Тело запроса:
value=&name=&abbr=
Антипат
[LjUA] Офицер
могущество: 2241
длань судьбы
орк Ширагар
128 уровня
'/game/cards/api/use?api_client=CrazyNigerTest-0.1.0&api_version=2.0&card=a01856de793845a893316c378d950d0b'
@%#!&!
Тиендил, ну кто так делает? Почему часть параметров в GET, а часть в POST, для одного и того же запроса!
CrazyNiger
[DRAGO] Магистр
могущество: 9733
длань судьбы
мужчина Злобный Дракон
260 уровня
Антипат
'/game/cards/api/use?api_client=CrazyNigerTest-0.1.0&api_version=2.0&card=a01856de793845a893316c378d950d0b'
@%#!&!
Тиендил, ну кто так делает? Почему часть параметров в GET, а часть в POST, для одного и того же запроса!
Ну так в документации же написано:



Сообщение изменено
Антипат
[LjUA] Офицер
могущество: 2241
длань судьбы
орк Ширагар
128 уровня
Да, спасибо. Я понял, просто подобный подход я встречаю впервые, когда для одного и того же метода часть параметров в посте, а часть в гете передается. Осуждаю...