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