Я пытаюсь получить доступ к данным, сначала войдя на следующий сайт: https://accessns.nscorp.com/accessNS/логин/
Похоже, он отправляет эти запросы на серверную часть:
URL запроса: https://accessns.nscorp.com/accessNS/rest/auth/логин
Метод запроса: POST
Когда я отправляю этот запрос в python, я могу получить ответ с токеном CSRF.
Далее я хотел бы получить доступ:
Который принимает следующие заголовки:
Полезная нагрузка: {userId: "имя пользователя", classCode: "classcode", stationCode: "stationcode"}
Мой код дает сбой, когда я пытаюсь использовать токен CSRF и файлы cookie из запроса авторизации во вторичный запрос, но он не завершается ошибкой, когда я вручную вхожу на сайт, получаю токен / файлы cookie и жестко закодирую их в python. На самом деле все, что мне нужно с точки зрения заголовков для вторичного запроса, — это токен CSRF и файлы cookie, чтобы получить жизнеспособный ответ.
with requests.Session() as s:
login = {'Id': 'username', 'pwd': 'password'}
auth = s.post('https://accessns.nscorp.com/accessNS/rest/auth/login',
json=login)
headers = {}
headers['CSRFTOKEN'] = auth.json()['response']['token']
headers['Cookie'] = '; '.join('='.join((i.name, i.value)) for i in
auth.cookies)
payload = {'userId': 'username', 'classCode': 'classcode',
'stationCode': 'stationcode'}
url =
'https://accessns.nscorp.com/accessNS/rest/backend/ServicesIndustrial/
services/industrial2/v2/onsite/details'
inv= s.post(url, json=payload, headers=headers)
print(inv.json())
Я ожидаю получить ответ json с данными, которые я запрашиваю, однако, используя мой код, я получаю:
{'время': 1559217902355, 'сообщение': 'Ссылка на объект не указывает на экземпляр объекта.. Номер ссылки: 1559217902355', 'причина': 'Неверный ввод пользователя', 'isError': True}, что для меня похоже, это проблема с моими заголовками/полезной нагрузкой, или я пропустил промежуточный шаг.
Когда я жестко кодирую токен/файлы cookie csrf и не использую сеанс запросов, я получаю ответ, который хочу.
Разобрался, мой код работает нормально. Оказывается, вторичный запрос был сделан на неправильный URL-адрес, что странно, потому что это то, что указано в каждой консоли разработчика, которую я проверял.