1

Я пытаюсь прочитать одно значение с веб-устройства. Устройство имеет простую форму Post, которая когда вернет HTML-страницу. Это отлично работает из браузера, но не из командной строки:

# curl -H "Content-Type: text/html"   -X POST -d '{"FGSP":"Read","D900":"100  ","D901":"0    "}' http://192.168.9.187/GSP.htm

Возвращает:

<div id="page">
 <form name="param" method="post">
  <table width="750">
   <tr><td class="cntr">Parameter number</td>
       <td class="cntr"><input name="D900" type="text" value="0    "></input></td>
       <td>&nbsp;</td></tr>
   <tr><td class="cntr">Parameter value</td>
       <td class="cntr"><input name="D901" type="text" value="0     "></input></td>
       <td class="errr">&nbsp                                     </td></tr>
   <tr class="cntr"><td><input type="submit" name="FGSP" value="Read"></input></td>
       <td><input type="submit" name="FGSP" value="Write"></input></td>           </tr>
  </table>
 </form>
</div>

Это неверно, так как D900 должен иметь значение 100, а D901 должен иметь значение 5 в успешной публикации. Итак, я предполагаю, что параметры сообщения не были переданы правильно?

Если я делаю то же самое из браузера в Chrome, он работает:

Chrome представление формы

Как мне дублировать действия веб-браузера из командной строки?

1 ответ1

0

Этот запрос был отправлен во встроенную систему, и, похоже, порядок параметров имеет значение. Таким образом:

curl -X POST -H "FGSP: Read" -H "D900: 100" -H "D901: 0" -H "Content-Type: application/x-www-form-urlencoded" -H "Cache-Control: no-cache" -H "extra-token: 00000000000000000000000000000000000000000000" -d 'D900=100&D901=0&FGSP=Read' "http://192.168.9.187/GSP.htm"

дает правильный ответ. Команде curl также нужен дополнительный токен довольно большой длины (я предполагаю, что каким-то образом дополнить заголовок).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .