![Могу ли я заполнить и отправить эту форму с помощью cURL?](https://rvso.com/image/1604271/%D0%9C%D0%BE%D0%B3%D1%83%20%D0%BB%D0%B8%20%D1%8F%20%D0%B7%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C%20%D0%B8%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%8D%D1%82%D1%83%20%D1%84%D0%BE%D1%80%D0%BC%D1%83%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20cURL%3F.png)
Я пытаюсь отправить данные в форму на работе. Я подозреваю, что мой наивный подход не работает из-за "технологии" на странице, которая мешает ему. По сути, веб-страница (извините, я не могу дать на нее ссылку, она не является публичной) имеет
<form action="login.php" method="get" name="LogIn" class="form-signin">
и затем несколько входов, таких как
<input type="text" class="form-control" id="docIdent" name="docIdent" placeholder="@" required>
поэтому я пробую следующую команду cURL:
curl -d "docIdent=WHATEVER" -d "type=WHATEVER" -d "comment=" URL
где, по-видимому, были необходимы три фрагмента данных, были получены следующим образом: 1. Загрузкой .html. 2. Изменением метода формы с «post» на «get» и открытием ее в браузере. 3. Заполнением формы и отправкой (конечно, получена ошибка «страница не найдена», но новый URL содержал все эти данные, включая пустое третье поле).
Ну, это не работает (я получаю ту же самую страницу входа, и я могу проверить, что на момент попытки входа не было). Я не очень разбираюсь в этих вещах, но подозреваю, что это может быть какой-то другой код, которого нет на странице: есть
<script src="dist/js/bootstrap.min.js"></script>
<script src="dist/js/jquery-3.4.1.min.js"></script>
<script src='js/fns.js'></script>
и, конечно, "login.php" в форме открытия. Из многих других сообщений мой синтаксис кажется правильным; есть ли надежда на автоматический вход (тип скрипта bash, который я помещу в cron, как однострочный, который я пробую)? Спасибо.
решение1
Ну, в конце концов я нашел следующее решение: с помощью своего браузера (Firefox, Web Developer Tools) я перехватил запрос. Выглядело это примерно так:
curl 'URL' -H 'Host: SOMETHING' -H 'User-Agent: SOMETHING' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en,en-US;q=0.5' --compressed -H 'Referer: SOMETHING' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' --data 'WHATEVER'
... плюс информация о cookie, которую я удалил, потому что хотел посмотреть, достаточно ли остального, которое не меняется каждый раз. И это сработало. Большое спасибо grawity за полезную поддержку.
решение2
Вы можете перехватывать каждый HTTP-запрос (формы GET или POST) с помощью Firefox Web-Tools:
Веб-инструменты -> Сеть -> отправить форму -> контекстное меню URL формы (щелкните правой кнопкой мыши по скрипту формы) -> Копировать => копировать как адрес cURL
Дополнительная информация:https://everything.curl.dev/usingcurl/copyas
решение3
Я думаю, что при публикации следует использовать-X ПОСТ
данные, которые вы хотите отправить в форме: --data-raw 'formField1=значение1&formField2=значение2'
curl 'http://localhost:8000/' -X POST --data-raw 'fname=John&lname=Smith'