curl 可以发送各种http请求。是一个在linux下强大的命令。之前大多数情况测试接口,我都是依赖于python脚本,用requests库发送请求。在了解到curl命令后,简单学习记录了下。
在帮助信息中可以查到很多有用的信息。比如-d选项可以加上post请求的数据。
练习了get请求和post请求的两个常用请求。
用python的flask框架简单写了一个web服务,放在自己的虚拟机上。
代码如下:
- GET 请求:
在python代码中不需要指定请求方式,默认为get请求。一般来说,参数都是以params的形式拼接在url后面,那么在python中获取这个参数的方法为:
request.args.get("参数名")
curl 发送请求时,只需要在url后拼接相应的参数即可:
curl http://centos121:5005/test_get?name=jeet
请求效果如下:
--silent:可以看到,curl会把很多信息都打印出来,如果不需要这些信息,只需要返回结果,可以加--silent参数。重新请求:
- POST 请求:
在flask中需要指定 methods=['POST'],以此声明请求方式为post。post请求中也可以存在params的参数,和get请求取参传参相同。post还可以提交json结构的参数,在flask中取参方式为:
# 该方法会返回传入的json体,结果为dict字典
request.json
在curl中传参方式为:
curl http://centos121:5005/test_post?name=jeet -H 'Content-Type:application/json' -d '{"data": "post test data"}' --silent
-H:声明请求头,要传json结构的数据,需要将请求头设置为 Content-Type:application/json,若不设置的话,则默认为application/x-www-form-urlencoded
-d:发送post请求的数据,curl会自动加-X POST,不需要再手动加,后面接具体的数据即可。
请求效果:
如果想在post请求体中写中文,目前我没学会如何进行手动转码,可以采取另一种方式,将json体写入一个文件内,然后提交文件内容即可:
curl http://centos121:5005/test_post -H 'Content-Type:application/json' -d @params.json
另外,如果有多个参数需要在url后面拼接多个参数,正常的是 param1=1¶m2=2,但是在shell脚本中,&是有特殊含义的,以daemon运行。所以想要拼多个参数,要对&符号进行转义,在前面加一个反斜杠:\&。或者直接将url和带有&符号的部分用引号引起来,作为一个变量。