• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос Проблема с автоматической авторизацией через Python (POST-запрос): статус 200, но нет редиректа

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
3
Реакции
0
Крч, решил перейти на selenium вместо голых запросов — браузер сам делает все редиректы и JS-скрипты, больше не был нужен костыль с двумя сессиями и мета-refresh. Захватываю капчу прямо со страницы через элемент, прогоняю через имеющийся распознаватель, ввожу логин, пароль и капчу, а дальше жду проверок на наличие определенной строчки на сайте. Всё работает с первого раза, больше нет проблем с куки и рассинхроном.

Всем спасибо за помощь!

Столкнулся с проблемой при попытке автоматизировать авторизацию на веб-сайте с помощью Python и библиотеки requests. Мой скрипт успешно отправляет POST-запрос с логином, паролем, корректно распознанной и отправленной капчей, а также полученным CSRF-токеном.

Однако, в ответ на POST-запрос сервер возвращает HTTP статус код 200 OK, но тело ответа содержит только BOM UTF-8 (\xef\xbb\xbf), и отсутствует редирект на личный кабинет. Авторизация вручную через браузер работает корректно.

Подскажите, пожалуйста, в чем может быть причина такого поведения сервера и как это можно исправить?
Возможно, кто-то сталкивался с подобной ситуацией? Буду благодарен за любые советы.

Вот часть моего кода, отвечающая за получение CSRF-токена:

Код:
Expand Collapse Copy
try:
    r_login_page = session.get(url)
    soup = BeautifulSoup(r_login_page.text, "html.parser")
    csrf_input = soup.find("input", {"name": "CSRFXID"})
    csrf_token = csrf_input["value"] if csrf_input else ""
except requests.exceptions.RequestException as e:
    print(f"[ERROR] Ошибка при получении страницы авторизации: {e}")
    csrf_token = ""

Вот часть отвечающая за формирование данных для POST-запроса:
Код:
Expand Collapse Copy
payload = {
    "CSRFXID": csrf_token,
    "login": "логин",
    "password": "пароль",
    "secure": str(captcha_value),
    "login_action": "Войти"
}
print(f"Значение капчи для отправки: {captcha_value}, CSRF-токен: {csrf_token}")

Отправка POST-запроса:
Код:
Expand Collapse Copy
headers = {
    "User-Agent": "Mozilla/5.0",
    "Referer": url,
    "Content-Type": "application/x-www-form-urlencoded",
    "Origin": "https://lk.pvpwar.net"
}
response = session.post(url, data=payload, headers=headers)
print(f"[DEBUG] Ответ на POST (статус код): {response.status_code}")
print(f"[DEBUG] Ответ на POST (content): {response.content}")
print(f"[DEBUG] История редиректов после POST: {response.history}")

Проверка успешной авторизации(проверяю есть ли нужный текст на странице личного кабинета) :
Код:
Expand Collapse Copy
r_lk = session.get(lk_url)
if "Статус Аккаунта:" in r_lk.text or "Premium Статус" in r_lk.text or "Магазин за BP" in r_lk.text:
    print("Успешный вход!")
    logged_in = True
else:
    print("[ERROR] Авторизация не удалась ...")

P.S вот страница входа мб поможет
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
возможно проблема из за доп защиты капчи или ты используешь разные методы для сохранения куки
 
Столкнулся с проблемой при попытке автоматизировать авторизацию на веб-сайте с помощью Python и библиотеки requests. Мой скрипт успешно отправляет POST-запрос с логином, паролем, корректно распознанной и отправленной капчей, а также полученным CSRF-токеном.

Однако, в ответ на POST-запрос сервер возвращает HTTP статус код 200 OK, но тело ответа содержит только BOM UTF-8 (\xef\xbb\xbf), и отсутствует редирект на личный кабинет. Авторизация вручную через браузер работает корректно.

Подскажите, пожалуйста, в чем может быть причина такого поведения сервера и как это можно исправить?
Возможно, кто-то сталкивался с подобной ситуацией? Буду благодарен за любые советы.

Вот часть моего кода, отвечающая за получение CSRF-токена:

Код:
Expand Collapse Copy
try:
    r_login_page = session.get(url)
    soup = BeautifulSoup(r_login_page.text, "html.parser")
    csrf_input = soup.find("input", {"name": "CSRFXID"})
    csrf_token = csrf_input["value"] if csrf_input else ""
except requests.exceptions.RequestException as e:
    print(f"[ERROR] Ошибка при получении страницы авторизации: {e}")
    csrf_token = ""

Вот часть отвечающая за формирование данных для POST-запроса:
Код:
Expand Collapse Copy
payload = {
    "CSRFXID": csrf_token,
    "login": "логин",
    "password": "пароль",
    "secure": str(captcha_value),
    "login_action": "Войти"
}
print(f"Значение капчи для отправки: {captcha_value}, CSRF-токен: {csrf_token}")

Отправка POST-запроса:
Код:
Expand Collapse Copy
headers = {
    "User-Agent": "Mozilla/5.0",
    "Referer": url,
    "Content-Type": "application/x-www-form-urlencoded",
    "Origin": "https://lk.pvpwar.net"
}
response = session.post(url, data=payload, headers=headers)
print(f"[DEBUG] Ответ на POST (статус код): {response.status_code}")
print(f"[DEBUG] Ответ на POST (content): {response.content}")
print(f"[DEBUG] История редиректов после POST: {response.history}")

Проверка успешной авторизации(проверяю есть ли нужный текст на странице личного кабинета) :
Код:
Expand Collapse Copy
r_lk = session.get(lk_url)
if "Статус Аккаунта:" in r_lk.text or "Premium Статус" in r_lk.text or "Магазин за BP" in r_lk.text:
    print("Успешный вход!")
    logged_in = True
else:
    print("[ERROR] Авторизация не удалась ...")

P.S вот страница входа мб поможет
Пожалуйста, авторизуйтесь для просмотра ссылки.
лучше воспользуйся flask и создай роутеры будет легче работать с редиректами
 
возможно проблема из за доп защиты капчи или ты используешь разные методы для сохранения куки
обновил заголовки, чтобы они были как у браузера. не помогло, post по прежнему возвращает пустой ответ. просмотрел все скрипты на странице, искал что то связанное с логином или обработкой формы, но ничего необычного или явно отвечающего за нестандартный процесс входа не увидел.
единственный скрипт отвечающий за какую нибудь безопасность это обновление капчи:
Код:
Expand Collapse Copy
$(document).ready(function() {
    
        $('#ref_captcha').click(function(){
        $.get("/x100/antibot/rnd/"+Math.floor(Math.random()*99999), function(data) {
          $("#captcha").attr("src", "/x100/images/captcha/"+data);
        });
    });
    
    $('#accept_terms').click(function(){
        
        if($(this).attr('checked') == 'checked'){
            
            $('#gms_register_button').removeClass('disabled');
        } else $('#gms_register_button').addClass('disabled');
        
    });
    
    $.get("/x100/antibot/rnd/"+Math.floor(Math.random()*99999), function(data) {
      $("#captcha").attr("src", "/x100/images/captcha/"+data);
    });
    

});
 
лучше воспользуйся flask и создай роутеры будет легче работать с редиректами
хочу чтобы я просто запустил скрипт без всяких "открыть в браузере". а так в проекте побольше, возможно и использовал бы flask.
 
хочу чтобы я просто запустил скрипт без всяких "открыть в браузере". а так в проекте побольше, возможно и использовал бы flask.
так используй консольные веб библиотеки
 
Назад
Сверху Снизу