Почтовый запрос из двух частей для получения токена CSRF, затем сделайте еще один запрос

Я пытаюсь получить доступ к данным, сначала войдя на следующий сайт: https://accessns.nscorp.com/accessNS/логин/

Похоже, он отправляет эти запросы на серверную часть:

  • URL запроса: https://accessns.nscorp.com/accessNS/rest/auth/логин

  • Метод запроса: POST

  • Код состояния: 200 ОК
  • Удаленный адрес: 167.121.11.85:443
  • Политика реферера: без реферера при понижении рейтинга

Когда я отправляю этот запрос в python, я могу получить ответ с токеном CSRF.

Далее я хотел бы получить доступ:

Который принимает следующие заголовки:

  • Принять: /
  • Accept-Encoding: gzip, deflate, br
  • Принять-Язык: en-US,en;q=0.9
  • Соединение: Keep-alive
  • Длина контента: 58
  • Тип содержимого: приложение/json
  • Куки: [некоторые куки]
  • CSRFTOKEN: [из запроса авторизации выше]
  • Хост: accessns.nscorp.com
  • Происхождение: https://accessns.nscorp.com
  • Реферер: https://accessns.nscorp.com/accessNS/legacy/
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/73.0.3683.103 Safari/537.36

Полезная нагрузка: {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 и не использую сеанс запросов, я получаю ответ, который хочу.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
253
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разобрался, мой код работает нормально. Оказывается, вторичный запрос был сделан на неправильный URL-адрес, что странно, потому что это то, что указано в каждой консоли разработчика, которую я проверял.

Другие вопросы по теме