用curl实现python的请求

771 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情

curl与python都是实现网络请求的便捷工具,但当环境受限或者想要通过linux环境进行自动化时,虽然python在这方面逐步追赶,但curl语句目前依旧是首选,结合shell脚本,能够很方便的执行自动化命令。

这里通过对比的方式,向大家分享curl语句的用法,其中python选用requests库来发送请求,请求的内容是上篇说到的httpbin.org网站。

请求头与GET请求

python中通过headers’来控制请求头

headers = {
  'Date': '20220822'
}
response = requests.request("GET", url, headers=headers)

curl使用 -H进行,名称与值之间不需要多加引号

curl -H "Date:20220823" http://127.0.0.1:8001/get 结果如下:

image.png

简单POST请求

在python的requests库中,将请求参数换为POST即可实现POST请求,在curl中,通过-X参数来控制请求方法

curl -X POST -H "Date:20220823" http://127.0.0.1:8001/post

结果如下:

image.png

 

带表单参数的POST请求

python中可以将表单参数封装为一个字符串,也可以做成一个字典,在data参数传入requests。此处的payload也可以写成字典形式。

url = "http://httpbin.org/post"
payload='name=tom&age=18'
headers = {
  'Date': '20220822',
  'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

curl中也是同样的,可以将这两个数据写为字符串或者字典。

curl -X POST -H "Date:20220823"  -d "name=tom&age=18"  http://127.0.0.1:8001/post

需要注意的是curl中可以拆开,将连着的字符串变为两个-d参数,d即是data的意思

curl -X POST -H "Date:20220823"  -d "name=tom" -d "age=18"  http://127.0.0.1:8001/post

效果也是一样的

image.png

 

但如果写成字典格式,curl得到的结果会略有不同

curl -X POST -H "Date:20220823"  -d '{"name":"tom","age":"18"}'  http://127.0.0.1:8001/post

image.png  

这种形式的也可以将这个数据写到文件中,通过@的方式取得。

 

此种形式还可以用-T参数,将这个文件的数据放入到data中

curl -X POST -H "Date:20220823"  -T  xx.json  http://127.0.0.1:8001/post

image.png    

此时放入的相当于是body参数中