Как реплицировать post-запрос, как показано в Chrome Inspect?

#javascript #api #cookies #axios #postman

#javascript #API #файлы cookie #axios #почтальон

Вопрос:

Я пытаюсь программно аутентифицировать себя для фэнтезийной игры Премьер-лиги (https://fantasy.premierleague.com /). Когда я проверяю вкладку сети в Chrome Inspect во время входа в систему, я вижу следующий запрос post и ответ..

Общие сведения:
URL запроса: https://users.premierleague.com/accounts/login /
Метод запроса:
Код статуса POST: 302
Удаленный адрес: 151.101.86.217:443
Политика реферера: нет реферера при понижении

Заголовки ответа:
принять-диапазоны: байты
кэш-контроль: частный, без кэша, без хранилища, обязательный для повторной проверки, максимальный возраст = 0
длина содержимого: 0
тип содержимого: текст / html; кодировка = utf-8
дата: Вс, 31 марта 2019 17:22:05 GMT
местоположение: https://fantasy.premierleague.com/a/login?state=success
сервер: nginx / 1.13.5
набор файлов cookie: csrftoken=cjda9XUQ26ZiXWl0KUbk5GVNNVUSUQZCy70OMZn4TcjapME8pijv7cNI413bPHs8; истекает = Вс, 29 марта 2020 17:22:05 GMT; Максимальный возраст = 31449600; Путь =/
набор файлов cookie: сообщения =» fa4474ff71c7bd5422bf64125057fbc6ed68c6b1$[[«__json_сообщение»540542554″ Успешно выполнен вход как .»]54[«__ json_сообщение»540542554″ Вы вышли из системы.»]54[«__ json_message»540542554″ Успешно выполнен вход в систему как .»]]»; httponly; Path=/
set-cookie: sessionid=mruasqjsv9ru8r7qlqk5vauixkt3uq88; истекает = Sun, 14 апреля 2019 17:22:05 GMT; httponly; Max-Age=1209600; Path=/ set-cookie: sudo=»V1mmxfTng2qS:1hAe9l: Kn0n8h3dSwGH-Qv2RbGNn5MrwvE»; истекает = Вс, 31 марта 2019 20:22:05 GMT; httponly; Максимальный возраст = 10800; Путь =/; безопасный
набор файлов cookie: pl_profile=eyJzIjogIld6SXNNVFk1T1RZNU5qVmQ6MWhBZTlsOll5aU4zQ3BWb1A0a3l2ZDZUS09LLUNyeHJhdyIsICJ1IjogeyJsbiI6ICJMaW5kYmVyZyIsICJmYyI6IDMsICJpZCI6IDE2OTk2OTY1LCAiZm4iOiAiSmltIn19 ; Domain=premierleague.com ; истекает = Sun, 14-Apr-2019 17:22:05 GMT; Max-Age = 1209600; Path =/; защищенный
статус: 302
изменить: Cookie
через: 1.1 google
через: 1.1 varnish
x-cache: ПРОПУСТИТЬ
x-cache-хиты: 0
параметры x-фрейма: ОДНОТИПНЫЙ
x-обслуживаемый: cache-bma1634-BMA

Заголовки запроса
: полномочия: users.premierleague.com
: метод: POST
:путь: /учетныезаписи/ логин/
: схема: https
принимает: текст / html, приложение / xhtml xml, application / xml; q= 0.9, изображение / webp, image /apng,/; q= 0.8
принимает-кодировка: gzip, deflate, br
принимает-язык: sv-SE, sv;q=0.9,en-US;q= 0.8,en;q=0.7
контроль кэша: максимальный возраст=0
длина содержимого: 186
тип содержимого: application/x-www-form-urlencoded
cookie: _ga=GA1.2.963283199.1544268407; _gid=GA1.2.530727258.1554052864; csrftoken=xRErJTDda0drIGPICOjvXMHhkjjRRmsO74wbhoZBmKbz5zpHATuVJQ3sTWIIvaXf; сообщения=» 956228cd3e90b2b498670e8d2101699bcec07800$[[«__json_сообщение»540542554″ Успешно выполнен вход как .»]54[«__ json_сообщение»540542554″ Вы вышли из системы.»]]»; _gat=1; _gat_UA-33785302-1=1
происхождение: http://evil.com /
реферер:https://fantasy.premierleague.com/?fail
обновление-небезопасные запросы: 1
пользовательский агент: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, как Gecko) Chrome / 72.0.3626.121 Safari /537.36

Form Data:
csrfmiddlewaretoken: OFwVFKPSkKc0AG1hxHekpCSWb1l3Wl35
login:
password:
app: plfpl-web
redirect_uri: https://fantasy.premierleague.com/a/login

I’m trying to replicate this post request using Javascript and Axios. I have the following code:

 authPLfantasy() {
        let formData = new FormData();
        formData.append('password', '<password>');
        formData.append('login', '<username>');
        formData.append('redirect_uri', 'https://fantasy.premierleague.com/a/login');
        formData.append('app', 'plfpl-web');

        let config = {
            url: 'https://users.premierleague.com/accounts/login',
            method: 'post',
            withCredentials: true,
            data: formData
        };

        return axios.request(config);
    }
  

Результат, который я получаю при регистрации результата этой функции, таков: «Доступ к XMLHttpRequest по адресу ‘https://users.premierleague.com/accounts/login ‘ из источника’http://localhost:3000 ‘ был заблокирован политикой CORS: значение заголовка ‘Access-Control-Allow-Origin’ в ответе не должно быть шаблоном ‘*’, когда режим учетных данных запроса «включает». Режим учетных данных запросов, инициируемых XMLHttpRequest, контролируется атрибутом withCredentials.»

Я смутно знаком с CORS, поэтому думаю, что смогу решить эту проблему, если буду достаточно долго и сильно биться головой о стену, но я слышал, что CORS не повлияет на отправку запроса post через Postman, поэтому я попытался использовать это вместо этого, просто чтобы посмотреть, смогу ли я заставить это работать. Хотя я получаю ответ 200 OK с помощью Postman, я не получаю правильный ответ, что крайне важно, мне не хватает файлов cookie pl_profile и sessionid. Измененные данные формы в Postman, чтобы пароль или имя пользователя были недействительными, по-прежнему отображали ответ 200 OK.

Конечная цель — с помощью Javascript отправить запрос post после того, как пользователь отправит необходимые учетные данные после нажатия кнопки в моем приложении React. Должны быть сгенерированы необходимые файлы cookie, чтобы приложение впоследствии могло отправить запрос get на другую конечную точку, защищенную авторизацией, и получить информацию оттуда. Я чувствую, что это не должно быть так сложно, но я просто не могу заставить его работать.

Комментарии:

1. Каков фактический ответ в Postman? Кроме того, самый быстрый способ обойти проблему CORS — это использовать внутренний прокси для выполнения post вызова. Поскольку вы используете JS, я бы рекомендовал Node.

Ответ №1:

Если вы используете Chrome, возможно, проще всего

  1. Откройте Chrome Dev Tools
  2. Перейдите на вкладку Сеть
  3. Выберите запрос, который вы хотите реплицировать
  4. Щелкните правой кнопкой мыши и выберите «Копировать> Копировать как cURL»
  5. Откройте терминал, вставьте команду и выполните ее

введите описание изображения здесь