原本以前API接口都是通过GET去获取数据,因为没有要求验证信息,所有把带的参数等信息都可以直接在URL看到,最近要求数据提交采用POST方式,在把原本SHELL通过GET的接口转为POST的情况中了解了一些资料。
一、GET和POST的区别
1、安全性
POST相比与GET来说是相对安全,所谓的相对安全其实POST和GET都是明文传输的,通过抓包还是能看到里面的数据。相对安全是GET只要通过URL就可以看到传输的信息,而POST里面参数数据是存放在HEAD中的。且GET的数据可能被浏览器缓存,他人在看浏览器记录的时候就可能可以获取你的查询的信息和条件。而POST数据不会被缓存,就不会有这种情况出现。
大家就会继续问为什么GET会被缓存而POST不会被缓存了。
GET的本意是获取资源,也就是是一个读的操作,无论你做多少次这样的操作都不会修改查询的数据的状态,因此在这种情况下我们认为GET是安全的,因此GET的内容会被浏览器给记录下来或者Cache服务器给缓存下来。而POST的本意是追加/添加数据,每次进行POST操作,我们都认为修改操作的对象,因此浏览器不会对该数据进行缓存。
2、URL限制
GET的URL长度是有做限制的,标准的URL不存在参数上的限制问题,因此HTTP协议规范也没有对URL长度进行限制,该限制取决于浏览器。
POST里面上是没有限制的,如果说是有限制的话取决于服务器的处理能力。
3、表单数据限制
GET要求一定要为ASCII 类型数据
POST没有任何要求
4、表图为w3s里面的截图
二、如何修改脚本发送http的post请求
原本都是采用GET发送请求,对于要获取的数据直接wget 加具体的URL然后带上参数就可以了,因此想想wget应该也支持POST的HTTP请求
1、wget命令
果不其然,在google查找就有介绍其使用方法;
通过--post-data参数来实现,以下是该网址给的例子:
wget --save-cookies cookies.txt \
--post-data 'user=foo&password=bar' \
后续在专门整理文章对于wget命令进行详解;
2、curl
除了wget外,curl也是我们常用的访问http的工具,看了下其实现post的http请求为
通过-d参数,把访问参数放在里面,以下是相关例子:
curl --data "data=xxx" example.com/form.cgi
文章:http://www.ruanyifeng.com/blog/2011/09/curl.html 对于curl命令有了很详细的解释,很值得我们去看下,且作者写的博文都把人家觉得很复杂的东西写得很简化明了
阅读(1446) | 评论(0) | 转发(0) |