Как отправить форму Laravel с помощью cURL от CLI? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть приложение laravel с формой, в которой по запросу GET (example.my.lan/form) формы пользователь получает файл cookie *_session и файл cookie XSRF-TOKEN.Сейчас я пытаюсь вызвать контроллер (example.my.lan/form/confirmation) через POST в командной строке с помощью cURL:

curl -vvv -k -X POST -d "param1=value1&param2=value2" \
-H "Content-Type: application/x-www-form-urlencoded" \
--cookie "my_form_session=a...z" \
--cookie "XSRF-TOKEN=a...z" https://example.my.lan/form/confirmation

curl -vvv -k -X POST -d "param1=value1&param2=value2" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "my_form_session=a...z" \
-H "XSRF-TOKEN=a...z" https://example.my.lan/form/confirmation

curl -vvv -k -X POST -d "param1=value1&param2=value2" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "my_form_session: a...z" \
-H "XSRF-TOKEN: a...z" https://example.my.lan/form/confirmation

Из моего браузера все работает как положено.Но если я вызываю контроллер на CLI, используя cURL, приложение laravel всегда отвечает 419 (срок действия страницы истек).Я знаю, что это какая-то проблема, связанная с файлами cookie, но до сих пор не могу понять, как ее решить - может, у кого-то есть идея?

1 Ответ

0 голосов
/ 01 марта 2019

Итак, грубо говоря, вот что должно произойти:

Вам необходимо выполнить начальный запрос, чтобы получить действительный файл cookie сеанса (который по сути является зашифрованным идентификатором сеанса), и наряду с этим вам также необходимо каким-то образом получитьдействительный токен CSRF.

Для получения токена у вас есть два варианта.

  1. Посетите страницу с формой, в которую она входит, через @csrf
  2. Получите файл cookie с именем XSRF-TOKEN, содержащий зашифрованный токен csrf

Когда вы отправляете запрос, вы должны быть уверены, что отправили правильный файл cookie сеанса, например, --cookie "my_form_session=a...z".

Если вы получили токен из поля @csrf, отправьте заголовок X-CSRF-TOKEN или как дополнительное поле формы _token=csrftoken

Если вы получили токен из XSRF-TOKEN cookie, который содержит зашифрованный токен CSRF, должен находиться в поле X-XSRF-TOKEN.

По соглашению все нестандартные заголовки HTTP должны иметь префикс X- (что указывает на расширение протокола) именно поэтому эти заголовки начинаются с X-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...