curl 可以发送各种http请求。是一个在linux下强大的命令。之前大多数情况测试接口,我都是依赖于python脚本,用requests库发送请求。在了解到curl命令后,简单学习记录了下。

python脚本中如何使用curl命令 python调用curl命令_json

在帮助信息中可以查到很多有用的信息。比如-d选项可以加上post请求的数据。

练习了get请求和post请求的两个常用请求。

用python的flask框架简单写了一个web服务,放在自己的虚拟机上。

代码如下:

python脚本中如何使用curl命令 python调用curl命令_python脚本中如何使用curl命令_02

  • GET 请求:

在python代码中不需要指定请求方式,默认为get请求。一般来说,参数都是以params的形式拼接在url后面,那么在python中获取这个参数的方法为:

request.args.get("参数名")

curl 发送请求时,只需要在url后拼接相应的参数即可:

curl http://centos121:5005/test_get?name=jeet

请求效果如下:

python脚本中如何使用curl命令 python调用curl命令_post请求_03

--silent:可以看到,curl会把很多信息都打印出来,如果不需要这些信息,只需要返回结果,可以加--silent参数。重新请求:

python脚本中如何使用curl命令 python调用curl命令_json_04

  • 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,不需要再手动加,后面接具体的数据即可。

请求效果:

python脚本中如何使用curl命令 python调用curl命令_json_05

如果想在post请求体中写中文,目前我没学会如何进行手动转码,可以采取另一种方式,将json体写入一个文件内,然后提交文件内容即可:

curl http://centos121:5005/test_post -H 'Content-Type:application/json' -d @params.json

python脚本中如何使用curl命令 python调用curl命令_python脚本中如何使用curl命令_06

另外,如果有多个参数需要在url后面拼接多个参数,正常的是 param1=1&param2=2,但是在shell脚本中,&是有特殊含义的,以daemon运行。所以想要拼多个参数,要对&符号进行转义,在前面加一个反斜杠:\&。或者直接将url和带有&符号的部分用引号引起来,作为一个变量。