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),用来测试文件上传的。
启动项目,我们测试第一个接口save(name),模拟带body参数:
curl -XPOST -d hello http://localhost:9090/save
我们需要添加请求头参数,修改Content-Type属性 -H "Content-Type: application/json"
模拟发送body参数请求成功,而且也解决了参数尾部会增加“=”的问题。
另外,除了直接在命令行里直接输入body参数之外,我们可以通过指定一个文件的内容作为参数body的内容,也是可以的,我们通过-T选项指定文件。
curl -XPOST -T body.txt http://localhost:9090/save
通过指定文件为body参数,就不用指定请求头参数了。
///\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
测试文件上传,curl提供一个-F参数选项用来做文件上传,但是-F参数的格式尤其需要注意,比如-F "file=@c:\Users\Administrator\Desktop\body.txt",其中参数中的“@”字符很关键,如果没有字符“@”我们的文件依旧无法上传。
错误的文件上传:
状态码400表示参数错误,失败信息显示请求所需的file不存在。
正确的文件上传:
总结一下就是,发送POST请求,可以通过指定请求头类型Content-Type来解决body参数尾部会增加“=”的问题。文件上传,我们使用-F选项,选项中的字符“@”是必须的,表示是文件位置前缀。
标签:body,文件,请求,发送,参数,curl,上传
来源: https://blog.csdn.net/feinifi/article/details/95968221