扒一扒运维开发必备的基本命令之curl(附实例)

什么是 curl

curl 是一种数据传输工具。它可以作为开发库和基于终端的 cli 来使用,两者都有相同的引擎(事实是,cli 工具只是在开发库下的一个程序)。

curl 适用于你可能使用的每个协议。

curl 能做什么

与数据传输有关的所有事情(都可以用curl)。每个人都用过浏览器(比如你正在使用浏览器阅读本文),浏览器所做的就是请求一个页面,并得到响应,它可以写入和读取cookie,然后渲染(显示内容、图像和执行js脚本)。

除了最后一步渲染以外(因为它与数据传输无关),curl 可以做所有浏览器所做的工作。

总之,curl 可以下载html页面,可以填充并且提交 html 表单,可以从 FTP/HTTP 服务器下载、上传文件,还可以读写 cookie

这使得它成为脚本编写、调试和取证分析等方面的优秀工具。

curl 命令实例

我们来看看可以用 curl 做什么

1. 从服务器获取响应

服务器上返回的所有内容都是对请求的响应。因此,获取HTML页面与下载文件是一样的。

比如,从一个网址中获取html响应:

curl http://info.cern.ch/

从服务器中获取文章的列表:

curl https://jsonplaceholder.typicode.com/posts

我们知道了如何从服务器获取响应,那么就可以下载文件 (比如 google 的logo) :

curl https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

上述命令将转储你无法在终端中查看的二进制图像数据,首先需要保存它们,然后使用照片查看器查看(国内访问google需FQ)。

注:选项在命令中的位置是没有严格顺序的,所以如果你将选项放在了最后,而例子中将其放在了开始,则不需要担心。

2. 使用默认的文件名保存文件

互联网上的每个文件都会有一个文件名,要使用其原名称保存下载的文件,可以使用 -O 选项:

curl -O http://www.google.com/robots.txt

3. 使用自定义名称保存文件

要使用自定义的名称保存文件,使用 -o 选项,后跟(严格的)自定义名称:

curl -o http://www.google.com/robots.txt googleRobots.txt

4. 下载多个文件

要下载多个文件,可使用空格分开:

curl url1 url2 url3

如果你要对所有 url 都使用 -O 选项,可以这样:

curl url1 url2 url3 -O -O -O

应对任何选项都可以执行相同的方法。第一个选项针对的是第一个url,第二个选项针对第二个url,以此类推。

5. 下载一系列文件

curl 具有从服务器下载一系列文件的功能,看下面的例子:

curl http://www.google.com/logo/logo[1-9].png

上面的命令下载logo1,png, logo2.png, logo3.png, 一直到 logo9.png。

6. 只下载最新版本

仅当文件的修改时间晚于给定时间时才下载文件:

curl url -z "DD MMM YY MM:HH:SS"

7. 继续下载

如果已经部分传输了文件,可以使用 -C 选项恢复传输。需要继续传输的偏移量应作为参数传递给 -C 标志。

curl -C 1024 http://seeni.linuxhandbook.org/files/largeFile.mpv -O

8. 上传文件

要将文件上传到服务器,需要使用 -T 选项,后跟本地的文件路径:

curl -T uploadFile.txt http://upload.linuxhandbook.org/files

9. 删除文件

要删除名为 deleteFile.txt 的文件,可以使用 -X 选项,这个选项可以用于任何 HTTP 方法 (比如 GET, POST, PUT, DELETE, PATCH)。如果没有 HTTP 方法,大多数 FTP 服务器都会配置 DELETE 方法。

curl -X DELETE http://upload.linuxhandbook.org/files/deleteFile.txt

你还可以修改上述命令来为任何 HTTP 方法执行相应的任务。例如,如果你的服务器允许 TRUNCATE 方法(一个创建的方法,不是标准的),只删除文件中的内容,而不删除文件本身,则可以使用类似如下命令:

curl -X  TRUNCATE http://upload.linuxhandbook.org/files/mysql.dump

上面提到的是 curl 的主要用途。(在使用的过程中)可能会遇到一些困难,比如重定向、用户身份校验、SSL证书等,我们称它们为附加项,因为它们是可选的,但对于某些操作来说仍然是很重要的。在下面的章节中,我们将讨论这些附加项,以及如何使用 curl 来处理这些附加项。

10. 避免重定向

当你请求地址 http://www.google.com,你得到的可能是 www.google.co.in, 这是因为地址的重定向(状态代码在300-399范围内的HTTP数据包)。

你可以使用 -L 选项来避免重定向:

curl -L  http://www.google.com

11. 身份验证

当服务器配置为仅为具有凭据的特定个人服务时,会为他们提供用户名和密码(即需要登录才能访问)。可以使用 -u 选项:

curl -u username:password http://seeni.linuxhandbook.org/files/tasks.txt

12. 数据传输限制

如果要施加数据传输限制,可以使用 --limit-rate 选项。以下命令尝试将下载速率限制到10k:

curl --limit-rate 10K http://seeni.linuxhandbook.org/files/logoDetails.tgz

13. 显示/隐藏传输状态

如果响应是从终端执行的,比如上传,下载,那么curl会自动显示传输的状态(进度条)。如果不想看到进度条,只需要在命令后面加上 -s 选项即可,这样在终端上就不会显示进度了。

14. 忽略 SSL 证书

还记得有些网站访问时,需要授予安全证书的情况吗?如果你信任该地址并希望进行数据传输,则可以使用 -k 选项来忽略 SSL 证书验证:

curl -k https://notSoSecure.org/files/logoDetails.tgz

15. 获取信息头

在进行数据传输的时候显示信息头,可使用 -i 选项:

curl -i http://www.google.com/robots.txt

16. 只显示信息头

如果只想要信息头,而不想要数据,则使用 -I 选项:

curl -I http://www.google.com/robots.txt

17. 更改用户代理

一些网站或服务器不允许某些特定的设备访问系统。但是他们怎么知道我们使用什么设备呢?这是由 User-Agent HTTP 的头信息来告诉对方的。我们可以使用 -A 选项来更改 User Agent:

curl -A "Mozilla FireFox(42.0)" http://notAllowedForCLI.sites.org/randomFile.png

18. 向服务器发送数据

如果服务器需要一些参数数据,比如 token 或者 API密钥,可使用 -d 选项发送数据。在命令行中,发送的数据需要跟在 -d 选项后面,可以使用 & 来组合多个数据。这通常是在浏览器中通过 GET 或 POST 请求来完成的,这是你发送表单信息的方式之一。

curl -d "token=34343abvfgh&name='seeni'" http://api.restful.org/getcontent

19. 将 Cookie 写入文件

Cookie 是一些小的信息,允许在无状态的 HTTP 协议中保持会话。如果想了解更多cookie的信息,可以访问 Using HTTP cookies (https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)。

要将cookie下入文件,可以使用 -c 选项,后跟 cookie 文件名:

curl -c googleCookie.txt http://www.google.com/files

20. 从文件中读取Cookie

要从文件中读取 cookie, 可使用 -b 选项,后跟cookie文件名:

curl -b googleCookie.txt http://www.google.com/files

请注意,-b 选项仅从文件中读取 cookie,如果服务器重新发送了另一个cookie,你需要使用 -c 选项来重写它们。

21. 启动新会话

如果想要丢弃cookie来启动一个新会话,可使用 -j 选项。使用该选项后,即便你通过 -b 读取到了cookie,它也会启动一个新的会话。

curl -b googleCookie.txt http://www.google.com/files -j

你可能感兴趣的:(linux,网络安全,操作系统,linux,学习,服务器)