Делаю бота, который бы позволял откликаться на задания на Яндекс услугах. Использую Python и Requests. Авторизацию прохожу, странички загружаю. Проблема возникает когда хочу оставить отклик на задание через API. При попытке это сделать яндекс возвращает 403 ошибку и undefined с заголовками:
{'Cache-Control': 'no-cache, max-age=0, must-revalidate, no-store', 'Content-Encoding': 'gzip', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'X-Date': '1625834781', 'X-Yandex-Req-Id': '1625834781657609-865179455691553378100330-man2-1242-man-shared-app-host-20030', 'x-app-outdated-status': 'false', 'x-auth-error': '2'}
'x-auth-error': '2' Я так понимаю, что ошибка в авторизации, но конкретно что не так не пойму.
Исходный код:
# -*- coding: utf-8 -*-
import json
import pickle
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0',
'Content-Type': 'application/json;charset=utf-8',
'Connection': 'keep-alive'}
login = ''
password = ''
api_link = 'https://uslugi.yandex.ru/api/orders?completely_moderated=0®ion=213®ion=1&rubric=%2Fkomp_utery-i-it%2Fkomp_uternaa-pomos_&rubric=%2Fremont-i-ustanovka-tehniki%2Fposudomoecnye-masiny&rubric=%2Fremont-i-ustanovka-tehniki%2Fstiral_nye-masiny&rubric=%2Fremont-i-stroitel_stvo%2Felektromontajnye-raboty&rubric=%2Fremont-i-stroitel_stvo%2Fmaster-na-cas&rubric=%2Fremont-i-stroitel_stvo%2Fsantehniceskie-raboty-i-otoplenie&type=new&with_suggested_to_me=false'
class Yandex:
session = requests.Session()
def auth(self):
"""Авторизация на Яндексе"""
start_page = self.session.post('https://passport.yandex.ru/auth', data={'login': login, 'passwd': password}, headers=headers)
print(f'Авторизация {start_page}')
def save_cookies(self):
"""Сохранение Cookies"""
with open('cookies', 'wb') as file:
pickle.dump(self.session.cookies, file)
print('Cookies сохранены')
def load_cookies(self):
"""Загрузка Cookies"""
with open('cookies', 'rb') as file:
self.session.cookies.update(pickle.load(file))
print('Cookies загружены')
def api_page(self):
"""Страница со списком заданий"""
uslugi = self.session.get(api_link, headers=headers)
print(uslugi.status_code)
print('')
print(uslugi.json())
def create_order_reaction(self):
"""Создание отклика"""
data = {
"data": {
"params": {
"order_id": "a2ffdd24-de65-401f-a2f2-75d8b77941e9",
"order_reaction_info": {
"text": "Обращайтесь",
"desired_datetime": None,
"price": "500",
"photo_urls": []
}}}}
order_page = self.session.post('https://uslugi.yandex.ru/api/create_order_reaction', json=data, headers=headers)
print(order_page.status_code)
print(order_page.text)
print(order_page.headers)
yandex = Yandex()
yandex.load_cookies()
yandex.create_order_reaction()
Вот какие запросы передает и получает браузер:
Пробовал подставлять разные заголовки, но все равно ничего не получается. Подскажите, пожалуйста, где может быть ошибка?