Форум сайта python.su
Добрый день! Я написал код, используя инструкцию по подключению к тестовому контуру "https://fedresurs.ru/helps/Sfacts/MessagesService_3.4.pdf". Но при отправке запроса, возвращается ошибка о недоступности службы. Я уже всю голову сломал, может уже закипаю. Какие ошибки. Прошу сильно не пинать за код ногами.
Хотел сделать, чтобы при вводе определенного ИНН отправлялся запрос на сервер и возвращались все сообщения с упоминанием введенного ИНН. Сейчас в коде запрос ИНН есть, но запрос отправляется с уже введенным, как из примера в спецификации. Запрос ровно такой же как 3.1.2 Пример тела запроса.
Ссылку на код прикладываю ниже, буду благодарен за помощь.
https://github.com/GrobiDex/APIfedresurs/blob/main/app.py
Отредактировано grobi_dex (Май 22, 2023 23:49:20)
Офлайн
почему в словаре два одинаковых ключа
query = { 'messageTypes': 'AnyOther', 'messageTypes': 'FinancialLeaseContract', 'participant.type': 'Company', 'participant.code': '1027700109271', 'limit': 20, 'offset': 0 }
Офлайн
xam1816Я нашел несколько ошибок, там не только в этих ключах вопрос был, код обновил по ссылке
почему в словаре два одинаковых ключа
Отредактировано grobi_dex (Май 22, 2023 23:34:18)
Офлайн
grobi_dexнет страницы у меня 404
используя инструкцию по подключению к тестовому контуру https://fedresurs.ru/helps/Sfacts/MessagesService_3.4.pdf.
Офлайн
xam1816попробуй так "https://fedresurs.ru/helps/Sfacts/MessagesService_3.4.pdf" скопировать и в адресную
нет страницы у меня 404
Офлайн
Я поправил первоначальный код, чтобы получить ответ только. Что-то ты там не то ищешь в нём в итоге.
>>> import requests >>> import json >>> import hashlib >>> >>> # URL для авторизации и вызова методов ... url = 'https://services.fedresurs.ru/SignificantEvents/MessagesServiceDemo2/' >>> >>> # Логин и пароль для авторизации ... login = 'demo' >>> password = 'Ax!761BN' >>> >>> # Функция для проверки и очистки введенного ИНН ... def process_inn(): ... while True: ... inn = input('Введите ИНН (от 10 до 15 цифр): ') ... inn = ''.join([ch for ch in inn if ch.isdigit()]) # Удаление всех символов из строки, оставление только цифр ... if 10 <= len(inn) <= 15: ... return inn ... print('Введите число, состоящий из 10-15 цифр') ... >>> # Хэширование пароля ... password_hash = hashlib.sha512(password.encode('utf-8')).hexdigest().upper() >>> >>> # Параметры запроса на авторизацию ... params = { ... 'login': login, ... 'passwordHash': password_hash ... } >>> >>> # Отправка POST-запроса для получения авторизационного токена ... response = requests.post(url + 'v1/auth', data=json.dumps(params), headers={'Content-Type': 'application/json'}) >>> >>> # Извлечение токена из ответа ... if response.status_code == requests.codes.ok: ... #token = response.content.decode('utf-8') ... token = response.json()['jwt'] ... headers = { ... 'Authorization': 'Bearer ' + token ... } ... print('Токен получен') ... else: ... print('Не удалось получить токен авторизации. Код ошибки: %d' % response.status_code) ... token = '' ... headers = {} ... Токен получен >>> #inn = process_inn() ... >>> query = { ... 'messageTypes': 'AnyOther', ... 'messageTypes': 'FinancialLeaseContract', ... 'participant.type': 'Company', ... 'participant.code': '1027700109271', ... 'limit': 20, ... 'offset': 0 ... } >>> >>> response = requests.get(url + 'v1/messages', headers=headers, params=query) >>> response.raise_for_status() >>> # messages = response.json()['data'] ... >>> # for message in messages: ... # print(message['messageGuid']) ... # print(message['participantCode']) ... # print(message['datePublish']) ... # print(message['messageTypeName']) ... # print(message['messageText']) ... >>> import pprint >>> >>> pprint.pprint(response.json()) {'messages': [{'bodyAttributes': [{'date': '2020-12-18T00:00:00', 'number': '6281/1/A/20/3'}], 'datePublish': '2020-12-21T15:45:56.847', 'guid': '2A447F653A104ED0B4A3789F2EB0C16C', 'isAnnulled': False, 'isLocked': False, 'messageType': {'description': 'Заключение договора финансовой ' 'аренды (лизинга)', 'name': 'FinancialLeaseContract'}, 'number': '00023657', 'participants': ['ООО "Спецтранс Веста"', 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'], 'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'}, {'bodyAttributes': [{'date': '2020-12-04T00:00:00', 'number': '751/1/A/20/30'}], 'datePublish': '2020-12-15T19:01:23.057', 'guid': '8854017631A748718F3EB3A3CE8969CB', 'isAnnulled': False, 'isLocked': False, 'messageType': {'description': 'Заключение договора финансовой ' 'аренды (лизинга)', 'name': 'FinancialLeaseContract'}, 'number': '00023611', 'participants': ['ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"', 'ООО "Алексеевскдорстрой"'], 'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'}, {'bodyAttributes': [{'date': '2020-07-08T00:00:00', 'number': '620/1/A/20/99'}], 'datePublish': '2020-07-13T13:27:25.733', 'guid': '0D2A87E6A19A4C9296B9A91F88DA95A2', 'isAnnulled': False, 'isLocked': False, 'messageType': {'description': 'Заключение договора финансовой ' 'аренды (лизинга)', 'name': 'FinancialLeaseContract'}, 'number': '00016973', 'participants': ['ООО "Спецтранс Веста"', 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'], 'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'}, {'bodyAttributes': [{'date': '2020-06-04T00:00:00', 'number': '875/1/A/20/23'}], 'datePublish': '2020-06-17T11:19:39.3', 'guid': '79DFB275D8E740E785AA38F0FB63E12F', 'isAnnulled': False, 'isLocked': False, 'messageType': {'description': 'Заключение договора финансовой ' 'аренды (лизинга)', 'name': 'FinancialLeaseContract'}, 'number': '00016715', 'participants': ['ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"', 'ООО "Роуд Групп"'], 'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'}, {'bodyAttributes': [{'date': '2020-04-17T00:00:00', 'number': 'DChugunov14/1/A/20/6'}], 'datePublish': '2020-04-17T10:48:05.253', 'guid': '24CCBC8C52984AD5BABC11864FD8E56C', 'isAnnulled': False, 'isLocked': False, 'messageType': {'description': 'Заключение договора финансовой ' 'аренды (лизинга)', 'name': 'FinancialLeaseContract'}, 'number': '00016597', 'participants': ['Абакаров Шарабуттин Гамидович', 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'], 'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'}, {'bodyAttributes': [{'date': '2020-04-17T00:00:00', 'number': '6202/1/A/20/6'}], 'datePublish': '2020-04-17T10:29:45.44', 'guid': '91F6590D237E4CBC8DC8DEDC9D07A98A', 'isAnnulled': False, 'isLocked': False, 'messageType': {'description': 'Заключение договора финансовой ' 'аренды (лизинга)', 'name': 'FinancialLeaseContract'}, 'number': '00016596', 'participants': ['АЛЕШИН ДМИТРИЙ ЮРЬЕВИЧ', 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'], 'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'}, {'bodyAttributes': [{'date': '2020-04-10T00:00:00', 'number': '946/1/A/20/47'}], 'datePublish': '2020-04-10T09:56:45.247', 'guid': '751DB71AC00A407E967A3B732E1C7730', 'isAnnulled': False, 'isLocked': False, 'messageType': {'description': 'Заключение договора финансовой ' 'аренды (лизинга)', 'name': 'FinancialLeaseContract'}, 'number': '00016584', 'participants': ['ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"', 'ООО "ПОБЕДА"'], 'publisher': 'ЗАО "ДОЙЧЕ ЛИЗИНГ ВОСТОК"'}], 'total': 7} >>>
Отредактировано py.user.next (Май 23, 2023 00:13:16)
Офлайн
import requests import json import hashlib # URL для авторизации и вызова методов url = 'https://services.fedresurs.ru/SignificantEvents/MessagesServiceDemo2/v1/' # Логин и пароль для авторизации login = 'demo' password = 'Ax!761BN' session = requests.Session() # Функция для проверки и очистки введенного ИНН def process_inn(): while True: inn = input('Введите ИНН (от 10 до 15 цифр): ') inn = ''.join([ch for ch in inn if ch.isdigit()]) # Удаление всех символов из строки, оставление только цифр if 10 <= len(inn) <= 15: return inn print('Введите число, состоящий из 10-15 цифр') # Хэширование пароля password_hash = hashlib.sha512(password.encode('utf-8')).hexdigest() # Параметры запроса на авторизацию params = {'login': login, 'passwordHash': password_hash} # Отправка POST-запроса для получения авторизационного токена response = session.post(url + 'auth', data=json.dumps(params), headers={'Content-Type': 'application/json'}) # Извлечение токена из ответа if response.status_code == requests.codes.ok: token = response.json() session.headers.update({'Authorization': 'Bearer ' + token['jwt']}) print('Токен получен') else: print('Не удалось получить токен авторизации. Код ошибки: %d' % response.status_code) token = '' headers = {} query = { 'messageTypes': ['AnyOther', 'FinancialLeaseContract'], 'participant.type': 'Company', 'participant.code': '1027700109271', 'limit': 20, 'offset': 0 } # Отправка запроса на контур response = session.get(url + 'messages', params=query) print(response.url) print(response.status_code)
Отредактировано xam1816 (Май 23, 2023 00:11:19)
Офлайн
py.user.nextладе не представляешь как я себя чувствую, когда вижу, что у тебя получилось, а я запустив твой же код получаю ошибку 400
Я поправил первоначальный код, чтобы получить ответ только. Что-то ты там не то ищешь в нём в итоге.
Прикреплённый файлы:
Снимок экрана 123.png (150,1 KБ)
Офлайн
grobi_dex
ладе не представляешь как я себя чувствую, когда вижу, что у тебя получилось, а я запустив твой же код получаю ошибку 400
'participant.type': 'Company'
Офлайн
grobi_dexДа я смотрю, ты уже в собственном коде запутался. Просто надо учиться пользоваться системой контроля версий. Коммиты не должны быть хаотичными. Каждый коммит должен быть со смыслом и полностью описан. Бывает так, что коммиты перекидываются потом, меняется их порядок, делается их слияние и так далее. Поэтому каждый коммит должен быть максимально независим от соседних коммитов.
ладе не представляешь как я себя чувствую, когда вижу, что у тебя получилось, а я запустив твой же код получаю ошибку 400
Офлайн