1.概述
在Linux系统中,可以利用命令来模拟HTTP请求中的GET、POST、PUT等请求,本文将阐述基于curl命令来模拟GET与POST请求,PUT、DELETE等请求与POST类似,同时分享一下本人的踩坑实录。
2.发送GET请求
在利用curl发送get请求时,需要注意携带参数的形式,因为get请求方式是在url中携带参数。若携带的参数是json形式,则请求方式如下:
curl "http://localhost:8080/video/cloud/visual/doorbell/live/isOnline?params='{"deviceNum":"33010201026"}'"
然而,当我信心满满以为上述请求能够正常进行时,这时居然给我上了一课,在接口内部进行JSON转换时,竟然抛出了异常,于是我又利用postman在本地服务重新测试了一遍,没有任何问题。这说明上述方式携带参数的方式是有问题的,在查阅了大量博客后,发现讲的都是大同小异,实践之后也毫无效果。于是咨询大佬,说要进行urlencode转码,恍然觉悟。找了个在线转码工具,对参数进行了转码,转码之后请求方式如下:
curl "http://localhost:8080/video/cloud/visual/doorbell/live/isOnline?params=%7b%22deviceNum%22%3a%2233010201026%22%7d"
转眼便请求成功。事实上,通过查阅API可以发现,可以直接以命令的方式在路径中进行urlencode转码,主要方式如下:
curl -X GET -G --data-urlencode "params={"deviceNum":"33010201026"}" "http://localhost:8080/video/cloud/visual/doorbell/live/isOnline"
3.发送POST请求
发送post请求时,一般会将参数放在body体中,也可能会放在url中,放在url中相对较少。本文也将从上述两种情况来分析:
(1)参数放于body体中
curl "http://localhost:8080/video/cloud/visual/doorbell/config/alarm/ring/update" -H "Content-Type:application/json" -X POST -d '{"deviceNum": "33010201026027028334","alarm":1}'
(2)参数放于url中
curl -d '{"deviceNum": "33010201026027028334","alarm":1}' "http://localhost:8080/video/cloud/visual/doorbell/config/alarm/ring/update"
4.小结
1.在Linux中模拟get请求时,需要进行urlencode转义;
2.本文讲述的模拟get请求时,只阐述在url中携带参数的情况;
3.在模拟post请求时,可以在url或body中传递参数,方式如上,具体指令含义可以查看curl指令集合。
5.参考文献
1.https://blog.csdn.net/thinkerman26/article/details/89026245