Не могу получать ответ в авторизации через python?
Пытаюсь разобраться с библиотекой requests
В общем пытаюсь авторизироватmся на сайте не пойму как это сделать, в ответе не вижу, что я авторизирован.
Не могу найти, где разобран конкретно вариант с формой js, может кто подскажет как авторизоваться на сайте с такой формой.
Код
import os import requests from dotenv import load_dotenv load_dotenv() data = { "captcha": "", "email": f"{os.getenv('My_email')}", "pass": f"{os.getenv('some_pass')}" } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", } variable = requests.Session() redir = variable.get("https://texttospeech.ru/api/v1/login") responce = variable.post("https://texttospeech.ru", headers=headers, data=data, allow_redirects=True) print(responce.text) |
import os import requests from dotenv import load_dotenv load_dotenv() data = { "captcha": "", "email": f"{os.getenv('My_email')}", "pass": f"{os.getenv('some_pass')}" } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", } variable = requests.Session() redir = variable.get("https://texttospeech.ru/api/v1/login") responce = variable.post("https://texttospeech.ru", headers=headers, data=data, allow_redirects=True) print(responce.text)
Дополнительно:
В variable.post не нужно ли использовать тот же урл - https://texttospeech.ru/api/v1/login ?
responce = variable.post("https://texttospeech.ru/api/v1/login", headers=headers, data=data, allow_redirects=True) |
responce = variable.post("https://texttospeech.ru/api/v1/login", headers=headers, data=data, allow_redirects=True)
У меня работает так:
1. Авторизация:
import requests url = 'https://texttospeech.ru/api/v1/login' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0', 'Content-Type': 'text/plain;charset=UTF-8', } data = {"email": "sample@email.com", "pass": "password", "captcha": ""} session = requests.Session() response = session.post(url, json=data) print(response.text) |
import requests url = 'https://texttospeech.ru/api/v1/login' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0', 'Content-Type': 'text/plain;charset=UTF-8', } data = {"email": "sample@email.com", "pass": "password", "captcha": ""} session = requests.Session() response = session.post(url, json=data) print(response.text)
2. Код для генерации mp3 из текста:
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0', 'Content-Type': 'text/plain;charset=UTF-8', } def get_token() -> str: url = 'https://texttospeech.ru/api/v1/login' data = {"email": "sample@email.com", "pass": "password", "captcha": ""} with requests.Session() as session: response = session.post(url, headers=headers, json=data) token = response.json().get('data').get('token') return token headers['token'] = get_token() def synthesize(text: str) -> None: url = 'https://texttospeech.ru/api/v1/synthesize' data = {"rate": "0", "pitch": "0", "volume": "0", "hertz": "0", "shift": "0", "echo": "0", "text": f'{text}', "code": "ru-RU009", "format": "mp3"} with requests.Session() as session: response = session.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json().get('message')) filelink = response.json().get('data').get('filelink') with open(f'{text[0:10]}.mp3', 'wb') as file: response = session.get(f'https://texttospeech.ru/{filelink}', headers=headers) file.write(response.content) else: print(response.text) synthesize('Привет мир') |
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0', 'Content-Type': 'text/plain;charset=UTF-8', } def get_token() -> str: url = 'https://texttospeech.ru/api/v1/login' data = {"email": "sample@email.com", "pass": "password", "captcha": ""} with requests.Session() as session: response = session.post(url, headers=headers, json=data) token = response.json().get('data').get('token') return token headers['token'] = get_token() def synthesize(text: str) -> None: url = 'https://texttospeech.ru/api/v1/synthesize' data = {"rate": "0", "pitch": "0", "volume": "0", "hertz": "0", "shift": "0", "echo": "0", "text": f'{text}', "code": "ru-RU009", "format": "mp3"} with requests.Session() as session: response = session.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json().get('message')) filelink = response.json().get('data').get('filelink') with open(f'{text[0:10]}.mp3', 'wb') as file: response = session.get(f'https://texttospeech.ru/{filelink}', headers=headers) file.write(response.content) else: print(response.text) synthesize('Привет мир')
- Спасибо! Да это ответ, а как получить ответ после авторизации там же идет редирект, где видна авторизация с https://texttospeech.ru. Как прописать редирект уже когда авторизирован, чтобы работать с телом сайта .
_______________________________________________________________________________________________________________________
Сейчас пробую варианты с селениум, тоже как вариант, cookies подгрузил но с использованием профилей chroma напрямую. Cохранить и через рефреш подгрузить не получилось. Столкнулся с тем, что если браузер уже запущен надо закрыть иначе ошибка, спасает только вариант работы в фоне. - А пример можно что вы хотите делать с телом сайта и что не получается?
-
да не получается вывести текст после авторизации, чтобы я мог работать с сайтом поскольку на этом сайте нет api.
- Jimm24, так после того как получили токен - отсылайте его в заголовке и работайте.
Дополнил свой ответ выше.
- dim5x, Спасибо огромное! Я уже через silenium почти решил, тоже вариант но встрял с сохранением, поскольку при нажатии открывается ос, а собственно перехвата в силениуме нет, собственно Ваш вариант с подстановкой линка дает понимание, что надо линк соединить с url сайта и сохранить уже свое значение по адресу обращения к файлу, только непонятно как обращаться в силениуме, если нет type=file пока не нашел. Спасибо за помощь! через requests куда удобнее.
Ответы:
1. подозреваю, что в .login надо отправлять POST-запрос с data, а не пустой GET
2. поле captcha не должно быть пустым. В этом может быть проблема
- 1. Get там по-моему вообще лишний поскольку страницы без путей покрайне мере авторизация обращается
https://texttospeech.ru/api/v1/login
но ответ через post идет следящего содержания если пост
{
"status": "error",
"message": "в запросе отсутствует email",
"runtime": 0.0012,
"data": false
}
если get 404 то есть такой страницы нет
2. Вот откуда взять это, я так и не пойму поскольку в ответе этот параметр пустой.
и смотрел после авторизации, если авторизирован идет редирект на https://texttospeech.ru/api/v1/user
но ответ там следующего содержания
{
"status": "error",
"message": "в заголовках отсутствует token",
"runtime": 0.0008,
"data": false
} - Заметил что капча меняет но при ручной авторизации ни разу не вводил эту капчу, она автоматом как-то прописывается.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для того чтобы получить ответ в авторизации через Python, необходимо использовать библиотеку requests для выполнения HTTP запросов. Ниже приведен пример кода, демонстрирующий как можно авторизоваться на сайте с помощью Python:
```php
import requests
# Установка параметров авторизации
url = 'http://example.com/login'
payload = {
'username': 'your_username',
'password': 'your_password'
}
# Отправка POST запроса для авторизации
response = requests.post(url, data=payload)
# Проверка статуса ответа
if response.status_code == 200:
print('Успешно авторизованы')
# Дальнейшие действия после успешной авторизации
else:
print('Ошибка авторизации')
# Обработка ошибки авторизации
```
В данном примере мы отправляем POST запрос на указанный URL с данными авторизации (логин и пароль) в виде словаря payload. После получения ответа, проверяем статус ответа: если код состояния равен 200, значит авторизация прошла успешно, и мы можем выполнять дальнейшие действия. В противном случае, обрабатываем ошибку авторизации.
Убедитесь, что вы правильно указали URL для авторизации, а также корректные данные для входа (логин и пароль). Также обратите внимание на возможные механизмы защиты, такие как CSRF токены, которые могут потребоваться для успешной авторизации.