我正在尝试从支持 Web 的设备读取单个值。该设备有一个简单的 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> </td></tr>
<tr><td class="cntr">Parameter value</td>
<td class="cntr"><input name="D901" type="text" value="0 "></input></td>
<td class="errr">  </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 浏览器中执行相同操作,则它会起作用:
如何从命令行复制 Web 浏览器正在执行的操作?
答案1
此帖子请求针对的是嵌入式系统,似乎参数的顺序很重要。因此:
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 命令还需要一个相当长的额外标记(我假设以某种方式填充标头)。