Python

Ошибка "405 Not Allowed" при попытке авторизоваться на сайте через скрипт на Python

Пишу парсер с авторизацией, но я так понял сайт блокирует POST запрос и я не могу этого сделать, что делать?
Код:
 import requests

session = requests.Session()

login = "my_login"
password = "my_password"
authUrl = "https://login.feature.fm/login/"

headers = {

'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0'
}

data = {
'username': login,
'password': password
}

response = session.post(authUrl, data=data, headers=headers).text
print(response)
Вот сама ошибка:
 C:\Users\PC\Scripts\ParserFuture>python main.py 

405 Not Allowed

405 Not Allowed
nginx/1.23.3

Заходишь на сайт в браузере, нажимаешь F12, авторизуешься и во вкладке "Сеть" внимательно изучаешь, какие именно заголовки (включая куки) и какое тело запроса браузер передаёт серверу и что именно сайт возвращает браузеру.

И воспроизводишь это в Python-запросе.

Для нормально сделанного сайта недостаточно единственного 'User-Agent' и передачи только логина / пароля.
Игорь Минаков
Игорь Минаков
72 522
Лучший ответ
Александр Пузанов я не могу понять, где именно смотреть что браузер отправляет на сервер, а что сайт отправляет в браузер
Александр Пузанов как я понял, отправляется только логин и пароль
Ошибка "405 Not Allowed" указывает на то, что сервер не разрешает выполнение запрошенного метода (в данном случае POST) на указанном ресурсе (URL). Это может быть вызвано ограничениями на сервере или настройками безопасности.

Есть несколько возможных причин, по которым вы можете получать эту ошибку при попытке авторизации на сайте через скрипт на Python:

Ограничения на сервере: Сайт, на который вы пытаетесь выполнить авторизацию, может иметь ограничения на использование POST-запросов или на доступ к авторизационному ресурсу. В таком случае, вам может потребоваться обратиться к администратору сервера или разработчикам сайта для уточнения политики безопасности и разрешения выполнения POST-запросов.

Неправильно указанный URL: Убедитесь, что вы правильно указали URL для авторизации. Возможно, вы используете неправильный URL, который не разрешает выполнение POST-запросов.

Ошибка в коде: Ваш код также может содержать ошибку, которая вызывает проблемы при выполнении POST-запроса. Убедитесь, что вы правильно указали параметры для авторизации (логин, пароль) и правильно передаете их в запросе.

Необходимость дополнительных параметров: Некоторые сайты требуют передачи дополнительных параметров в POST-запросе, таких как CSRF-токен или другие защитные меры. Убедитесь, что вы передаете все необходимые параметры в запросе.

Если вы уверены, что ваш код правильно реализует авторизацию и все параметры указаны правильно, но ошибка все равно возникает, то возможно сайт имеет ограничения на автоматическую авторизацию через скрипты. В таком случае, вам следует обратиться к администратору сайта или разработчикам для получения дополнительной информации о правилах использования и возможностях авторизации на сайте.
Орал ***
Орал ***
41 234
Возможно, сайт требует использование определенного типа запроса или заголовков. Попробуйте добавить заголовок "Content-Type" с значением "application/x-www-form-urlencoded" и изменить запрос на использование метода "GET" или "PUT". Также может помочь использование библиотеки Selenium для автоматизированного взаимодействия с сайтом, которая может обойти блокировки на уровне браузера.
Александр Пузанов немного пофиксил код:
 import requests 

session = requests.Session()

login = "my_login"
password = "my_password"
authUrl = "https://console-api.feature.fm/login"

headers = {

'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0'
}

data = {
'username': login,
'password': password
}

response = session.post(authUrl, data=data, headers=headers).text
print(response)
не туда отправлял POST запрос, но теперь, я столкнулся с другой ошибкой:
 C:\Users\PC\Scripts\ParserFuture>python main.py
{"status":401,"message":"Missing credentials"}