curl在实际中会被postman等替代,但是他仍然是一个快速的模拟http请求的工具,而且也有他不可替代的理由,使用简单,在命令行下就可以完成。
今天不是介绍如何使用curl模拟各种GET/POST/PUT/DELETE请求的,而是介绍如何模拟post请求带body参数,以及模拟上传文件。起因是笔者在一次使用curl模拟POST请求带body参数的时候,出现了一个问题,参数能够传给后台,但是后台接收的参数总是会在参数字符串后面增加一个“=”字符,这个令我很诧异,如是就想着研究一下,如何模拟一个POST类型带body参数的HTTP请求,并且参数不会被增加“=”号。
我们准备一个简单的服务端,提供两个接口,一个是保存save(@RequestBody String name)接口,打印name,并返回name,这个用来处理body参数的一个接口,方法签名是POST,另一个方法是upload(@RequestParam("file")MultipartFile file,HttpServletRequest request),用来测试文件上传的。
![](https://img-blog.csdnimg.cn/20190715150448747.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
启动项目,我们测试第一个接口save(name),模拟带body参数:
curl -XPOST -d hello http://localhost:9090/save
![](https://img-blog.csdnimg.cn/20190715153305747.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
我们需要添加请求头参数,修改Content-Type属性 -H "Content-Type: application/json"
![](https://img-blog.csdnimg.cn/20190715153357911.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
模拟发送body参数请求成功,而且也解决了参数尾部会增加“=”的问题。
另外,除了直接在命令行里直接输入body参数之外,我们可以通过指定一个文件的内容作为参数body的内容,也是可以的,我们通过-T选项指定文件。
curl -XPOST -T body.txt http://localhost:9090/save
![](https://img-blog.csdnimg.cn/20190715153718750.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
通过指定文件为body参数,就不用指定请求头参数了。
///\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
测试文件上传,curl提供一个-F参数选项用来做文件上传,但是-F参数的格式尤其需要注意,比如-F "file=@c:\Users\Administrator\Desktop\body.txt",其中参数中的“@”字符很关键,如果没有字符“@”我们的文件依旧无法上传。
错误的文件上传:
![](https://img-blog.csdnimg.cn/20190715154137781.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
状态码400表示参数错误,失败信息显示请求所需的file不存在。
正确的文件上传:
![](https://img-blog.csdnimg.cn/20190715154245205.png)
总结一下就是,发送POST请求,可以通过指定请求头类型Content-Type来解决body参数尾部会增加“=”的问题。文件上传,我们使用-F选项,选项中的字符“@”是必须的,表示是文件位置前缀。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)