CURL命令使用
一、curl命令是什么 ?
(1). curl 是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl
(2). curl 作为常用的命令行工具,在程序开发或者测试阶段常用curl命令用来请求 Web 服务器,curl支持的通信协议有HTTP、HTTPS、TFTP、SFTP、FILE、LDAP、LDAPS、IMAP、POP3、SMTP等。
(3). curl 在Windows,MacOS和大多数Linux发行版中作为默认设置提供,可以在终端输入curl -help查看一些关于curl的操作。
提示:以下内容将重点介绍如何使用curl构建不同的web请求。
二、Make a POST Request(构建POST请求)
默认情况下,curl发送的是GET请求,如果要使用curl构建一个POST请求,需要添加 -X POST命令行参数,如果要向POST请求添加数据,那么可以使用 - d 命名行参数,如果要改变Content-Type信息,可以使用 - H 参数。
以下例子将演示CURL构建POST的常用方式:
1.发送一个不携带数据的POST请求:
curl -X POST url(请求路径)
2.发送一个携带数据的POST请求(-d 参数会强制curl发送POST请求,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded):
curl -d "id=10&username=seeker&age=20" -X POST url(请求路径)
或者
curl -d "id=10" -d "username=seeker" -d "age=20" url(请求路径)
3.发送一个携带JSON数据格式的POST请求:
提示:下面两种方式应该都是一样的,一个是JSON数据使用单引号包裹,一个是使用双引号包裹。使用双引号包裹的数据需要对JSON里的双引号进行转移。但是在Windows上测试时,我发现第一种无法被正确解析(可能是版本问题),所以在此处写了第二种方式,第二种在windows在可以正常解析。
curl -d '{"id":"10", "name":"seeler", "phone":"1315879"}' -H "Content-Type: application/json" http://localhost:8081/seeker/static/data/test
或者
curl -d "{\"id\": \"10\", \"name\": \"seeker\", \"phone\": \"13157\"}" -H "Content-Type: application/json" http://localhost:8081/seeker/static/data/test
4.发送一个携带XML数据格式的POST请求:
curl -d '<user><login>ann</login><password>123</password></user>' -H 'Content-Type: text/xml' url(请求路径)
5.发送一个带文件的POST请求:
提示:-F参数用来向服务器上传二进制文件,当加上-F参数后,HTTP 请求会自动加上Content-Type: multipart/form-data。本次演示服务端代码采用JAVA,定义接收文件参数名为uploadFile,在curl中将log.txt作为uploadFile字段上传。
//服务器端代码
@RequestMapping(method = RequestMethod.POST,value = "fileTest",produces = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadTest(@RequestParam("uploadFile") MultipartFile uploadFile){
uploadFile.getOriginalFilename();
return "success";
}
//curl请求
curl -F "uploadFile=@C:/Users/seeker/initData/log.txt" http://localhost:8081/seeker/static/data/fileTest
6.发送一个带文件的POST请求,并修改文件名称:
提示:增加了filename属性,指定文件重命名后的名称。通过debug可以看到文件已经更改为log20220414.txt
curl -F "uploadFile=@C:/Users/seeler/initdata/log.txt;filename=log20220414.txt" http://localhost:8081/seeker/static/data/fileTest
二、Add HTTP Headers
1.如果想要向请求头中添加属性,可以在构建REST请求时添加-H参数:
例如:向header中添加Accept-Language属性
curl -H 'Accept-Language: en-US' http://localhost:8081/seeker/static/data/testHeader
2.如果要向请求头添加多条属性,在构建REST请求时使用多个-H分开添加:
curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' http://localhost:8081/seeker/static/data/testHeaders
3.如果要向请求头添加一个空属性,在构建REST请求时不必写上属性的值即可:
例如:添加一个名为Brand的空属性
curl -H 'Brand;' http//localhost:8081/seeker/static/data/testHeaders
三、Set Cookies
默认情况下,curl构建的REST请求不会自动携带Cookies相关的信息,当然你也可以使用 -b ‘name = value’ 命令行参数来设置Cookies信息。
1.构建REST请求并添加Cookies:
curl -b 'session=abcdef' http//localhost:8081/seeker/static/data/cookies
2.将请求响应的Cookies保存到文件中:
例如:将请求百度的Cookies信息放入cookies.txt文件中
curl -c cookies.txt https://www.baidu,com
3.从文件中加载cookies信息:
curl -b cookies.txt https://baidu.com
四、Print the Response Headers
默认情况下CURL构建的REST请求不会打印响应头信息,只会打印响应体信息,如果你想让CURL能够打印响应头和响应体信息,可以使用 -i 命令参数
1.打印响应体和响应头信息:
curl -i https://www.baidu.com
五、Save the Response to a File
默认情况下CURL构建的REST请求只会将响应信息打印到终端上显示,如果想要将响应信息保存到文件中,可以使用 -o file 命令参数。
1.将请求响应信息保存到文件中:
curl -o response.txt http://localhost:8081/seeker/static/data/hello
查看文件内容:
总结
本章内容并未演示GET请求,因为CURL默认就是采用GET请求,所以不再演示。熟练的使用CURL构建REST请求,那么可以抛弃很多图形化请求工具(比如POSTMAN),熟练使用CURL也是一个开发或者测试人员需要掌握的。如果想了解更多CURL相关知识,可以访问:Curl Cookbook进行学习。