Curl命令行用于在没有用户交互的情况下将数据从服务器传输到本地。 使用curl您可以使用各种常见的协议下载或上传数据,这些协议包括HTTP,HTTPS,SCP,SFTP和FTP。Curl提供了很多选项,比如中断传输恢复,限制带宽,代理支持,用户身份验证等等

安装curl

curl命令现在都已被预先安装在大多数Linux发行版上

要检查系统上是否安装了curl包,请打开控制台,键入curl,然后按Enter键。如果你安装了curl,系统会打印curl: try 'curl --help' or 'curl --manual' for more information,否则你会看到curl command not found

如果没有安装curl,您可以使用发行版的软件包管理器安装它。

在Ubuntu和Debian上安装Curl

sudo apt install curl

在CentOS和Fedora上安装Curl

sudo yum install curl

如何使用Curl

curl命令的语法如下:

curl [options] [URL...]
  • options- Curl选项
  • URL - 远程服务器的URL。

在没有任何选项的情况下使用时,curl将以最简单的形式显示[url]中指定的资源到标准输出,即将内容输出到终端

在以下示例中,我们将检索https://www.myfreax.com主页:

curl https://www.myfreax.com

上面的命令将https://www.myfreax.com 在终端窗口中打印主页的源代码。

如果你没有指定协议curl将尝试猜测你想要使用的协议,它将默认为HTTP

如何使用curl发起POST请求并发送JSON数据

--header选项设置请求头,--request选项设置请求方式为POST,--data指定json数据的字符串,命令如下所示

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"username":"xyz","password":"xyz"}' \
  http://localhost:3000/api/login

如何使用curl上传文件

-F选项指定HTTP的multipart POST 的数据,这种方式就像HTML中的Form表单一样上传文件,也可以传递数据,比如下面的示例中userid=1,这相当于html表单的input元素name=userid,value=1。可以将-F选项使用多次,传递不同数据

curl \
  --request POST \
  -F "userid=1" \
  -F "filecomment=This is an image file" \
  -F "image=@/home/user1/Desktop/test.jpg" \
   http://localhost/uploader.php

将curl输出保存到文件

要保存curl命令的结果,可以使用-o-O选项。

小写-o使用预定义的文件名保存文件,在下面的示例中为vue-v2.5.16.js

curl -o vue-v2.5.16.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js

大写-O将使用其原始文件名保存文件:

curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js

如何使用Curl下载多个文件

要一次下载多个文件,请使用多个-O标志,然后指定要下载文件的URL。在以下示例中,我们将下载Arch Linux和Debian iso文件

curl -O http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso  \-O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso

如何恢复Curl的下载

您可以使用-C - 选项继续下载。如果你在下载大文件时断开连接,而不是从头开始下载,则可以继续下载

例如,如果使用以下命令下载Ubuntu 18.04 iso文件:

curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso

突然你的连接断开就可以使用-C - 恢复下载

curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso

使用Curl获取URL的HTTP标头

HTTP标头是冒号分隔的键值对,包含用户代理,内容类型和编码等信息。使用请求或响应在客户端和服务器之间传递标头

-I选项允许您仅获取指定资源的HTTP标头:

curl -I --http2 https://www.ubuntu.com/
curl: (1) Unsupported protocol

如何使用curl测试网站是否支持HTTP/2

要检查特定URL是否支持新的HTTP/2协议,请使用 -I选项和--http2选项获取HTTP标头

curl -I --http2 -s https://www.myfreax.com/ | grep HTTP

-s选项告诉curl在静默中运行并隐藏进度和错误消息。

如果远程服务器支持HTTP/2,则会打印curl HTTP/2.0 200

HTTP/2 200

否则响应将为HTTP/1.1 200.

HTTP/1.1 200 OK

如果你的curl版本是 7.47.0或更新版本,则不需要使用该--http2选项,因为默认情况下为所有HTTPS连接启用HTTP/2。

如何使用cURL跟随重定向

如果您尝试检索google.com主页,则不会www发现以下情况:

curl http://www.myfreax.com
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.17.0</center>
</body>
</html>

正如您从上面的输出中看到的myfreax.com重定向到https版本,并且因为默认情况下curl不遵循HTTP Location标头,因此您无法获得myfreax主页的来源。

-L 选项可以让curl遵循任何重定向,直到到达最终目的地:

curl http://www.myfreax.com

如何更改Curl User-Agent

有时服务器根据访问者设备和浏览器提供完全不同的内容,这是因为远程服务器根据User-Agent来提供不同的结果

在这种情况下,您可以使用-A 选项模拟其他浏览器:

curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://getfedora.org/

上面的命令将模拟Firefox 60请求页面 getfedora.org

如何指定最大传输速率

--limit-rate选项允许您限制数据传输速率。该值可以用字节表示,带k后缀的是千字节,带后缀m 兆字节,后缀g 千兆字节

在以下示例中,curl将下载Go二进制文件并将下载速度限制为1mb:

curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

当您不希望curl占用所有可用带宽时,此选项很有用。

如何通过Curl操作FTP服务器文件

要使用curl命令访问受保护的FTP服务器,请使用-u选项并指定用户名和密码,如下所示

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

该命令将列出用户主目录中的所有文件和目录。

您可以从FTP服务器下载文件:

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz

要将文件上载到FTP服务器,使用-T 选项后指定上传文件的名称:

curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

使用curl发出请求时,默认情况下不会发送或存储任何cookie。有时,您可能需要使用特定cookie发出HTTP请求以访问远程资源或调试问题

要将cookie发送到服务器,请使用-b 选项,后面包含cookie或者cookie的文件名

例如,要下载Oracle Java JDK rpm文件 jdk-10.0.2_linux-x64_bin.rpm ,您需要传递一个名为oraclelicense =value的cookie

curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm

curl怎么使用代理

Curl支持不同类型的代理,包括HTTP,HTTPS和SOCKS。要通过代理服务器传输数据,请使用-x--proxy)选项,后跟代理URL

以下命令将使用192.168.44.1端口上的代理下载指定的网页8888

curl -x 192.168.44.1:8888 https://www.myfreax.com/

如果代理服务器需要身份验证,请使用-U--proxy-user)选项,后跟用冒号(user:password)分隔的用户名和密码:

curl -U mark:Passvv0rd -x 192.168.44.1:8888 http://www.myfreax.com/

本教程中显示的示例很简单,旨在帮助您了解curl命令的工作方式,要了解有关curl的更多信息,请访问Curl Documentation页面,如有问题请在下方留言