curl
应该还算是一个比较常见的东西吧?比如说,我们在学习Elasticsearch
的时候去看官方文档,就可以看到curl
的踪影,有的时候看别人的写的文档也会看到curl
的
这篇文章来简单介绍一下curl
以及它的用法,要是大家再遇上curl
了,那就知道这是什么了。
介绍curl
什么是curl
?
我们进入官网,看到简介是这样的:
command line tool and library for transferring data with URLs
curl
是在命令行下工作的,利用URL的语法进行数据的传输。
看起来有点抽象,我们可以简单地理解为:我们会用curl
去发出网络请求,然后得到和提取数据。
为什么我们要用curl
?以HTTP请求为例,如果要发出请求,我们常用的有POSTMAN
、IDEA也集成HTTP Client
等等
上面这些工具不香吗?讲真,还是挺香的。
那有了上面的工具,为什么我们还要用curl
呢?
我们不是所有的环境都有POSTMAN
和IDEA
的,比如说我们的Centos系统 。此时我们又想要发出网络请求,我们就可以通过curl
去帮我们做。
curl
不单单能支持http
请求,它支持的协议有30+
种,最常使用的有FILE、FTP、HTTP、HTTPS
等。
总的来说:curl
是一款很好用的网络请求工具,在浏览文档的时候都会有它的身影,如果你还不知道这个工具,建议可以了解一下。
我现在把系统常用的接口的请求给写到一个文档上,想要执行哪个接口,检索出来,在命令行执行一下就好了,还是非常方便的。(我命令行窗口会一直常开,几乎不用开POSTMAN
了)
体验curl
我们首先来体验一下最简单的curl
用法:
curl www.baidu.com
我们可以看到返回baidu的HTML信息:
现在我们想看百度给我们返回的响应头信息,于是我们可以这样干:
curl -i www.baidu.com
响应头的信息还不够,我现在请求头和响应头都想看:
curl -v www.baidu.com
OK,现在我们热身完了。我们平时可能会发个GET请求,然后把参数带给接口的吧?在curl
里怎么做呢?其实很简单,跟浏览器的方式是一样的,我们把参数拼在链接后面就可以了(这里注意带单引号):
curl '127.0.0.1/send?receivers=3y&age=24'
打到断点可以看到,我们成功把参数给带过去了:
发完GET,我们有的时候也会使用POST
请求,怎么做呢?
curl -X POST --data "receivers=3y" '127.0.0.1/send'
接口也是能拿到参数的,只不过我们发的是POST
请求。
上面的命令好像复杂了一点,其实不然。-X POST
表示发的是POST
请求,而--date
后面跟着表示要带什么参数过去。
我们在后面加个-v
参数就知道上面是不是真的发了POST
请求。
当我们执行curl -X POST --data "receivers=三歪" '127.0.0.1/send' -v
时,看到返回的信息会告诉我们(其实我们不需要使用-X POST
在标明这是一个POST
请求,curl
已经可以帮我们判断了)
在发POST
请求的时候,我们也有更加简便的参数(-d
来标明我们这是POST
请求的数据体):
curl -d "receivers=三歪" '127.0.0.1/send'
众所周知HTTP支持好几种动作,我们想发PUT
请求,那就使用-X PUT
就可以发出PUT请求了。(如果不指定,默认就是GET
请求)
OK,现在我们已经会发GET
和POST
请求了。现在我们的接口前后端交互一般用的是json
格式,于是我们要发送一个POST
请求并且告诉服务端我们的参数是json
格式,怎么做?实际上就是加头信息嘛~
curl -d '{"receivers":"3y"}' -H 'Content-Type: application/json' "127.0.0.1/sendWithJSON"
我们可以看到,用-H
后面就可以增加头信息
很多时候,我们在测接口的时候都需要登录的,一般我们都要为其添加Cookie
信息。在curl
里边也好办,我们使用-b
后带Cookie
的信息就好了。
curl -d '{"receivers":"3y"}' -b 'aaaa' -H 'Content-Type: application/json' "127.0.0.1/sendWithJSON"
上面就是基本在开发中常用的参数了,其实也不是很多吧。
curl
是一个请求的工具,服务端返回的文件
也是可以下载的。我们通过-o
来下载百度返回的HTML
而-O
参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名。
再回过头来看Elasticsearch
给我们的命令,应该就能看得懂了:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-darwin-x86_64.tar.gz
小技巧:我们在Chrome
浏览器调试的时候,可以把请求的信息复制为curl
格式的。
三歪小故事
在前阵子我也开始用起了curl
来请求接口,有一次由于域名要切换的原因,找到了运维大佬帮我弄一下。运维大佬说:“你加个Host 指定一下”。我当时只用curl
来发点请求什么的,加个头信息这种肯定是忘了(不会);
只能双手离开键盘,让大佬操作了。
curl --help
可以找到curl
所有的参数。