Linux Curl 命令及示例

2025年03月17日 | 阅读 9 分钟

Linux curl 命令用于通过支持的协议(如 HTTP、FTP、IMAP、SFTP、TFTP、IMAP、POP3、SCP 等)向服务器下载或上传数据。它是一个远程实用程序,因此无需用户交互即可工作。

数据从一个地方传输到另一个地方是计算机系统最重要和最常用的任务之一。然而,有许多可用于数据传输的 GUI 工具。但是,在命令行上工作时,它会变得有点复杂。curl 实用程序允许我们通过命令行传输数据。

Curl 是一个命令行工具,用于使用 URL 语法获取和发送数据,例如文件。它支持 libcurl 支持的所有协议,因为它使用 libcurl。Curl 支持 HTTPS,并在默认指定安全协议(如 HTTPS)时实现 SSL 证书验证。当 curl 通过 HTTPS 连接到远程服务器时,它将获取远程服务器证书并检查 CA 证书,以确保远程服务器的有效性,从而保证远程服务器就是它所声称的服务器。

有许多选项可以定义 CA 证书,例如 --capath--cacert。选项 --cacert 可用于指定 CA 证书存储文件的位置。如果在 Windows 平台上没有可用的 CA 证书文件,curl 将按以下顺序搜索名为“curl-ca-bundle.crt”的 CA 证书文件:

  • curl 程序所在的目录。
  • 当前工作目录。
  • 系统目录(Windows)。
  • 目录(Windows)。
  • %PATH% 环境变量中提及的目录。

当远程服务器使用自签名证书或远程服务器证书未通过 CA 证书文件中提及的 CA 签名时,Curl 将显示错误消息。可以使用 --insecure 或 -k 选项跳过证书验证。如果远程服务器有效,则远程 CA 证书也可以包含在 CA 证书存储文件中。

Curl 提供了大量有用的技巧,例如文件传输恢复、cookie、SSL 连接、HTTP post、FTP 上传、用户身份验证、代理支持等等。Curl 由 libcurl 负责所有与传输相关的方面。

什么是 libcurl?

libcurl 是一个客户端免费 URL 传输库。它支持 SMB、SMTP、SCP、RTMP、RTSP、POP3、MQTT、LDAP、Kerberos、IMAP、HTTPS、HTTP 代理隧道、HTTP PUT、HTTP POST、HTTP/1、Gopher、FTPS、FTP、DICT 和 cookie。该库还支持用户密码身份验证、代理、LDAPS、HTTPS 证书、基于 HTTP 表单的上传、FTP 上传、文件传输恢复、TFTP、Telnet、SFTP 和文件 URL 方案。

libcurl 非常紧凑。它在多个平台(包括 Microsoft Windows、UnixWare、Ultrix、Tru64、Symbian、Solaris、RISC OS、QNX Neutrino、OS/2、OpenBSD、NetWare、NetBSD、macOS、Linux、IRIX、iOS、HURD、HP-UX、FreeBSD、DOS、Darwin、OpenVMS、BlackBerry 10、BlackBerry Tablet OS、BeOS、Android、AmigaOS 和 AIX)上创建和工作方式相同。

libcurl 库兼容 IPv6、线程安全且免费。还提供 50 多种语言的绑定,包括 Python、PHP、Java 和 C/C++。
libcurl 库支持 SChannel、IBM i 上的 gskit、NSS、mbed TLS、Windows 上的 GnuTLS、iOS 和 macOS 上的 Secure Transport、通过 OpenSSL 的 TLS/SSL、rustls、BearSSL、wolfSSL、AmiSSL、libressl 和 Boringssl。

语法

使用 curl 的基本语法如下:

根据上述语法,

URL

URL 语法是通用的协议相关 URL。我们可以指定多个 URL,如下所示:

选项

curl 命令支持以下命令行选项:

--abstract-unix-socket <path>: 用于通过抽象 Unix 域套接字而不是网络进行连接。

--anyauth: 用于命令 curl 自行进行身份验证,以使用最安全的方法。此实用程序是可选实用程序 "--basic、--digest、--ntlm 和 negotiate",用于设置特定的身份验证方法。

-a, --append: 用于上传文件。它会追加文件而不是覆盖文件。如果服务器上不存在给定文件,它将创建一个新文件。

--basic: 指定使用 HTTP 基本身份验证。它是 curl 命令的默认选项。它有助于覆盖以前的设置。

--cacert <file>: 指定使用特定证书文件来验证对等方。文件可能包含多个 CA 证书。证书的标准格式是 PEM,因此所有证书都必须是 PEM 格式。

--capath <dir>: 指定使用特定目录来验证对等方。我们可以通过冒号 (:) 分隔指定多个路径,例如“path:path2:path3”。证书的标准格式是 PEM,因此所有证书都必须是 PEM 格式。

--cert-status: 用于验证服务器证书的状态。它使用证书状态请求或 OCSP 装订 TLS。

--cert-type <type>: 指定提供的 curl 证书类型。这些证书可以是 PEM、DER 和 ENG 格式。默认值为 PEM。如果多次指定,curl 将采用最后一个值。

-E, --cert <certificate[: password]>: 在通过任何基于 SSL 的协议(如 HTTPS、FTPS 等)获取文件时,指定使用客户端证书文件。

--ciphers <list of ciphers>: 用于选择连接中使用的密码。

--compressed-ssh: 用于启用内置 SSH 压缩。此选项将被服务器视为请求,因此服务器可能会或可能不会接受它。

--compressed: 用于使用 curl 算法请求压缩响应并保存未压缩文档。此选项将发送关于不支持编码 curl 的报告。

-K, --config <file>: 用于描述一个文本文件,用于读取 curl 参数。curl 将使用文本文件中的命令行参数。

--connect-timeout <seconds>: 用于指定 curl 连接超时时间的最大秒数。

--connect-to <HOST1:PORT1:HOST2:PORT2>: 用于向给定的主机和端口对创建请求;否则,它将连接到下一个对。此选项是用于在特定服务器上进行直接请求的便捷工具。

-C, --continue-at <offset>: 用于在给定偏移量处继续或恢复以前的文件传输。

-c, --cookie-jar <filename>: 用于指定一个特定文件,我们希望在成功操作后将所有 cookie 写入该文件。

-b, --cookie <data>: 用于将数据转发到 HTTP 服务器的 Cookie 头部。

--create-dirs: 与 '-o' 选项结合使用,它将创建所需的本地目录层次结构。

--crlf (FTP SMTP): 用于在上传时将 LF 转换为 CRLF。它是 MVS (OS/390) 的便捷工具。

--crlfile <file>: 用于指定(PEM 格式)证书吊销列表。

--data-ascii <data>: 是 ?-d? 选项的别名。

--delegation <LEVEL>: 用于将 LEVEL 设置为确认服务器在用户凭据方面允许委托什么。

--digest: 用于启用 HTTP Digest 身份验证。

-q, --disable: 如果作为第一个参数使用,它将忽略 curlrc 配置文件。

--dns-interface <interface>: 用于确认服务器发送出站 DNS 请求。

--dns-servers <addresses>: 用于指定 DNS 服务器而不是默认服务器。

-f, --fail: 用于使 curl 在服务器错误时静默失败。

-F, --form <name=content>: 用于模拟用户提交的已填写表单。

-P, --ftp-port <address>: 用于在与 FTP 连接时反转默认侦听器角色。

--ftp-ssl-ccc-mode <active/passive>: 用于设置 CCC 模式。

-G, --get: 用于指定 ?-d? 选项的数据在 HTTP GET 请求中使用,而不是 POST 请求。

-h, --help: 用于显示包含用法和支持选项的简要说明的帮助手册。

-0, --http1.0: 指定使用 HTTP 版本 1.0。

--ignore-content-length: 用于忽略 Content-Length 头部。

-i, --include: 用于包含 HTTP 响应头。

-4, --ipv4: 用于将名称解析为 Ipv4 地址。

-6, --ipv6: 用于将名称解析为 Ipv6 地址。

Curl 的协议

Curl 支持多种协议:

  • DICT: 它使我们能够仅使用字典查找单词。
  • FTP (S): Curl 使用许多杠杆和调整支持 FTP 协议。带或不带 TLS。
  • FILE: 它允许我们写入和读取本地文件。Curl 不允许远程访问 file://URL,但在 Microsoft Windows 上使用本机 UNC 方法时会起作用。
  • GOPHER (S): 它检索文件。
  • HTTP (S): Curl 使用无数的变体和选项支持 HTTP。它可以根据准确的命令行和构建选项说 0.9、1.0、1.1、2 和 3 HTTP 版本。
  • IMAP (S): Curl 使用邮件读取协议为我们下载电子邮件。带或不带 TLS。
  • LDAP (S): Curl 可以为我们实现目录查找,带或不带 TLS。
  • MQTT: Curl 支持 MQTT 的 3 版本。在 MQTT 上下载与“订阅”任何主题相同,发布/上传与“发布”任何主题相同。不支持通过 TLS 的 MQTT。
  • POP3 (S): 通过 pop3 服务器下载表示不带或带 TLS 接收邮件。
  • RTMP (S): RTMP 或实时消息协议主要用于服务器流媒体。
  • RTSP: Curl 支持 RTSP 的 1.0 下载。
  • SCP: Curl 支持 SCP 的两个 scp 传输版本。
  • SFTP: Curl 支持通过 SSH 的 2 版本进行 SFTP。
  • SMB (S): Curl 支持 SMB 的 1 版本进行下载和上传。
  • SMTP (S): 将内容上传到任何 SMTP 服务器意味着不带或带 TLS 传输电子邮件。
  • TELNET: 命令 curl 获取 telnet URL 会启动一个交互式会话,其中它传输从 stdin 读取的内容,并返回服务器传输给它的内容。
  • TFTP: Curl 可以实现 TFTP 上传和下载。

安装 curl 命令

curl 命令随大多数 Linux 发行版提供。但是,如果系统默认不包含 curl。您需要手动安装它。要安装 curl,请执行以下命令:

通过执行以下命令更新系统:

现在,通过执行以下命令安装 curl 实用程序:

通过执行以下命令验证安装:

上述命令将显示已安装的 curl 命令版本。

获取指定 URL 的内容

要获取任何特定 URL 的内容,请执行 curl 命令,后跟 URL。考虑以下命令:

上述命令将获取指定页面的页面数据。考虑下面的输出截图:

Linux Curl Command

从上面的输出中,我们可以看到正在获取给定 URL 的页面数据。要停止执行,请按 CTRL+C 键。

将数据保存到特定文件

要将数据保存到特定文件,请传递 '-o' 选项,后跟目录、文件名和 URL,如下所示:

考虑以下命令:

上述命令将把页面数据保存到“/home/javatpoint/Documents/”目录下的“linux.html”文件中。考虑以下输出:

Linux Curl Command

从上述命令中,我们可以看到下载数据的总量、接收数据、平均时间以及有关数据的其他一些统计信息。

要验证下载的数据,请通过执行 cat 命令打开文件:

考虑下面的输出截图:

Linux Curl Command

从 Web 下载文件

curl 的一个有趣且令人着迷的用途是我们可以从 Web 下载文件。要从 Web 下载文件,请复制下载链接并将其粘贴到 curl 命令中。我们还可以传递其他参数使其更具体。例如,下载最新版本的 ubuntu,复制 ubuntu 官方网站的 下载链接 并将其粘贴到 curl 命令中,如下所示:

上述命令会将 Ubuntu 20.04 下载到指定目录。请提供正确的文件扩展名;否则,它将以不同的格式下载文件。考虑以下输出:

Linux Curl Command

从上面的输出中,正在下载 ubuntu.iso 文件。我们可以看到下载时间、文件大小、下载速度和其他统计信息。要随时停止执行,请按 CTRL+D 键。

恢复中断的下载

下载可能会因某种原因中断。我们可以使用 curl 命令恢复下载。要恢复中断的文件,请使用 '-C' 选项和 curl 命令,如下所示:

上述命令将恢复指定 URL 的下载。

下载多个文件

要下载多个文件,请指定多个 URL,并用空格分隔,如下所示:

上述命令将分别从两个 URL 下载数据。

查询 HTTP 头部

HTTP 头部包含附加信息;它允许 Web 服务器下载此信息。要从网站查询 HTTP 头部,请执行带 '-I' 选项的命令,如下所示:

上述命令将产生以下输出:

Linux Curl Command
下一主题Linux mtr 命令