Сказка навсегда остановлена.

Мы безмерно благодарны каждому из вас за время, которое вы подарили нашей игре, истории, которые вы создали, поддержку, которую оказывали друг другу и нам.

Надеемся, Сказка останется светлым и добрым воспоминанием в вашей жизни, и вы будете вспоминать наши приключения с улыбкой.

Это были замечательные тринадцать лет. Спасибо вам за них.

С любовью, команда Сказки.

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



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

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

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

Исходный код: https://github.com/jurikolo/talekeepalive
Антипат
[LjUA] Офицер
могущество: 2242
длань судьбы
орк Ширагар
138 уровня
https://docs.the-tale.org/ru/stable/external_api/methods.html#id14
Немного не понял, какой параметр нужно передавать в запрос /game/cards/api/use? Потому что я передаю параметр card со значением uid карты. Он мне возвращает: "У Вас нет такой карты"...
CrazyNiger
[DRAGO] Магистр
могущество: 9737
длань судьбы
мужчина Злобный Дракон
261 уровня
Антипат
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] Офицер
могущество: 2242
длань судьбы
орк Ширагар
138 уровня
'/game/cards/api/use?api_client=CrazyNigerTest-0.1.0&api_version=2.0&card=a01856de793845a893316c378d950d0b'
@%#!&!
Тиендил, ну кто так делает? Почему часть параметров в GET, а часть в POST, для одного и того же запроса!
CrazyNiger
[DRAGO] Магистр
могущество: 9737
длань судьбы
мужчина Злобный Дракон
261 уровня
Антипат
'/game/cards/api/use?api_client=CrazyNigerTest-0.1.0&api_version=2.0&card=a01856de793845a893316c378d950d0b'
@%#!&!
Тиендил, ну кто так делает? Почему часть параметров в GET, а часть в POST, для одного и того же запроса!
Ну так в документации же написано:



Сообщение изменено
Антипат
[LjUA] Офицер
могущество: 2242
длань судьбы
орк Ширагар
138 уровня
Да, спасибо. Я понял, просто подобный подход я встречаю впервые, когда для одного и того же метода часть параметров в посте, а часть в гете передается. Осуждаю...
Tiendil
[НБ] Магистр
могущество: 14696
разработчик
дварф Халлр
106 уровня
Антипат
когда для одного и того же метода часть параметров в посте, а часть в гете передается. Осуждаю...
Тяжёлое наследие прошлого, тоже осуждаю :-)
Мореакиян
[⚑⚫] Магистр
могущество: 3

мужчина Тень-что-ходит
115 уровня
Реквесты отваливаются в начале каждого часа (00 минут) по таймауту примерно в трети случаев.
Я пускаю только GET-запросы (раз в минуту), в основном /game/api/info (с учётом client_turns).
Это какой-то внутренний крон срабатывает в этот момент, что ли, и перегружает сервер? Стоит пропускать обновления в первые минуты часа?
Или мои запросы просто слишком часто идут, нужно реже?
Tiendil
[НБ] Магистр
могущество: 14696
разработчик
дварф Халлр
106 уровня
Раз в час общитываются изменения в мире игры. Это точно вызывает скачёк нагрузки и может блокировать часть операций с базой. Скорее всего из-за этого.
Мореакиян
[⚑⚫] Магистр
могущество: 3

мужчина Тень-что-ходит
115 уровня
Tiendil
Что-то с этим можно/нужно сделать на стороне клиента? Увеличить таймаут будет достаточно? Или лучше вообще пропускать обновление в это время?