如何在 Linux 中使用 curl 命令

一份详尽的指南,解释了如何使用 curl 命令直接从您的终端获取网页和下载文件

卷曲 command 是 Linux 必须为您提供的一种更有趣的命令行实用程序。 卷曲 命令允许用户从服务器获取文件。

卷曲 由于它支持多种协议,如 RTMP、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、TELNET、HTTP、HTTPS、FTP、FTPS、IMAP、 IMAPS、DICT、文件、GOPHER、LDAP、LDAPS、POP3、POP3S 等。

卷曲 命令不仅仅是为您获取网页。了解此命令可用的选项使其更适合您的使用。让我们深入学习教程以更好地掌握使用 卷曲 命令使用一些简短的例子。

安装

使用前 卷曲 命令,检查它是否已经安装在您的系统上。使用命令 卷曲 --version 检查是否 卷曲 已安装。

万一如果 卷曲 未安装,使用以下步骤。

在基于 Ubuntu 和 Debian 的系统上, 利用:

sudo apt-get 更新
sudo apt-get install curl

在 RHEL、CentOs 和 Fedora 发行版上, 利用:

须藤 yum 安装卷曲

现在使用 卷曲 --version 命令以确保它已正确安装。

卷曲 --version

输出:

curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30。 0 librtmp/2.3 发布日期:2018-01-24 协议:dict 文件 ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 特性:Asynchfile LMSS-SPNerGO SSL 大 NT 文件 NT LMSS-BERGO SSL libz TLS-SRP HTTP2 UnixSockets HTTPS 代理 PSL gaurav@ubuntu:~$ 

现在我们准备好使用 卷曲 命令。

CURL 命令可用的选项

让我们先来看看一些可用的突出选项 卷曲 命令。

选项描述
-u从 FTP 服务器下载文件
-C恢复中断的下载
-o保存结果 卷曲 带有预定义文件名的命令
-一世获取已定义 URL 的 HTTP 标头
-O保存结果 卷曲 带有原始文件名的命令
--libcurl输出使用的 C 源代码 卷曲 对于指定的选项
-X使用代理访问 URL
-#显示进度条以显示下载状态

使用 CURL 检索网页

卷曲 命令,当不带任何选项使用时,获取命令中指定的 URL 的内容。

句法:

卷曲 [网址]

例子:

curl //allthings.how

输出:

gaurav@ubuntu:~$ curl //allthings.how html{overflow-x:hidden!important}html.i-amphtml-fie{height:100%!important;width:100%!important}html:not([amp4ads ]),html:not([amp4ads]) body{height:auto!important}html:not([amp4ads]) body{margin:0!important}body{-webkit-text-size-adjust:100%;- moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}html.i-amphtml-singledoc.i-amphtml-embedded{-ms-touch -action:pan-y;touch-action:pan-y}html.i-amphtml-fie>body,html.i-amphtml-singledoc>body{overflow:visible!important}html.i-amphtml-fie:not (.i-amphtml-inabox)>body,html.i-amphtml-singledoc:not(.i-amphtml-inabox)>body{position:relative!important}html.i-amphtml-webview>body{overflow-x :hidden!important;overflow-y:visible!important;min-height:100vh!important}html.i-amphtml-ios-embed-legacy>body{overflow-x:hidden!important;overflow-y:auto!important ;position:absolute!important}html.i-amphtml-ios-embed{overflow-y:auto!important;position:static}#i-amphtml-wrapper{overflow-x:hidden!important;over flow-y:auto!important;position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;margin:0!important;display:block!important} html.i-amphtml-ios-embed.i-amphtml-ios-overscroll,html.i-amphtml-ios-embed.i-amphtml-ios-overscroll>#i-amphtml-wrapper{-webkit-overflow-scrolling: touch!important}#i-amphtml-wrapper>body{position:relative!important;border-top:1px 实心透明!important}#i-amphtml-wrapper+body{visibility:visible}#i-amphtml-wrapper+body .i-amphtml-lightbox-element,#i-amphtml-wrapper+body[i-amphtml-lightbox]{visibility:hidden}#i-amphtml-wrapper+body[i-amphtml-lightbox] .i-amphtml-lightbox -element{visibility:visible}#i-amphtml-wrapper.i-amphtml-scroll-disabled,.i-amphtml-scroll-disabled{overflow-x:hidden!important;overflow-y:hidden!important}amp-instagram {padding:54px 0px 0px!important;background-color:#fff}amp-iframe iframe{box-sizing:border-box!important}[amp-access][amp-access-hide]{display:none}[subscriptions -dialog],body:not(.i-amphtml-s ubs-ready) [subscriptions-action],body:not(.i-amphtml-subs-ready) [subscriptions-section]{display:none!important}amp-experiment,amp-live-list>[update]{display :none}.i-amphtml-jank-meter{position:fixed;background-color:rgba(232,72,95,0.5);bottom:0;right:0;color:#fff;font-size:16px; z-index:1000;padding:5px}amp-list[resizable-children]>.i-amphtml-loading-container.amp-hidden{display:none!important}amp-list [fetch-error],amp-list [load-more] [load-more-button],amp-list[load-more] [load-more-end],amp-list[load-more] [load-more-failed],amp-list[load -more] [load-more-loading]{display:none}amp-list[diffable] div[role=list]{display:block}amp-story-page,amp-story[standalone]{min-height:1px !important;display:block!important;height:100%!important;margin:0!important;padding:0!important;overflow:hidden!important;width:100%!important}amp-story[standalone]{background-颜色:#202125!important;position:relative!important}amp-story-page{background-color:#757575}amp-story .amp-active>div,amp-story .i-amphtm l-loader-background{display:none!important}amp-story-page:not(:first-of-type):not([distance]):not([active]){transform:translateY(1000vh)!important }amp-autocomplete{position:relative!important;display:inline-block!important}amp-autocomplete>input,amp-autocomplete>textarea{padding:0.5rem;border:1px solid rgba(0,0,0,0.33) }.i-amphtml-autocomplete-results,amp-autocomplete>input,amp-autocomplete>textarea{font-size:1rem;line-height:1.5rem}[amp-fx^=fly-in]{visibility:hidden} amp-script[nodom]{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden} 

在这里,网页的内容作为源代码直接提取到您的终端。

您可以使用选项 -o-O卷曲 命令将此内容存储到文件中。

什么时候 -o 选项时,URL 的内容将使用用户定义的文件名保存到当前目录中。

句法:

curl -o [userdefined_filename] [URL]

例子:

gaurav@ubuntu:~/workspace$ curl -o ath.html //allthings.how % Total % Received % Xferd 平均速度时间时间时间当前下载上传总花费左速度 100 199k 100 199k 0 0 58743 0 0:00:03 0:00:03 --:--:-- 58743 gaurav@ubuntu:~/workspace$ ls ath.html gaurav@ubuntu:~/workspace$ 

在这个例子中,来自 URL ‘allthings.how’ 的内容被保存为我当前工作目录中名为 ath.html 的 HTML 文件。在打开这个 HTML 文件时,我将被重定向到保存的网页。

使用 CURL 命令下载文件

使用 -O 带有 curl 命令的选项也会将内容或网页或可下载包保存为文件,但会使用其原始名称保存此文件。

让我们通过一个例子来了解这一点:

例子:

这里我使用了 卷曲 命令与 -O 下载名为“的 Ubuntu 软件包”的选项cherrytree_0.37.6-1.1_all.deb' 来自 Ubuntu 软件包存储库。

gaurav@ubuntu:~/workspace$ curl -O //kr.archive.ubuntu.com/ubuntu/pool/universe/c/cherrytree/cherrytree_0.37.6-1.1_all.deb % Total % Received % Xferd Average Speed Time Time Time当前 Dload Upload Total Spent Left Speed 100 613k 100 613k 0 0 220k 0 0:00:02 0:00:02 --:--:-- 220k gaurav@ubuntu:~/workspace$

输出:

trinity@ubuntu:~/workspace$ ls ath.htmlcherrytree_0.37.6-1.1_all.deb trinity@ubuntu:~/workspace$

因此,该包现在已下载并以其原始名称保存在当前工作目录 (CWD) 中。

下载文件时显示进度条

使用时还有一种美学修改可用 卷曲 命令下载文件。您可以在终端上以进度条的形式查看文件下载的进度。你只需要附加 -# 选项与您的命令下载文件。

让我们看看这个调整的一个例子。

句法:

curl -# -O [URL]

例子:

gaurav@ubuntu:~/workspace$ curl -# -O //archive.ubuntu.com/ubuntu/pool/main/e/emacs-defaults/emacs-defaults_47.0.tar.xz ######## ############################################### ############################################### ################################# 100.0% gaurav@ubuntu:~/workspace$ 

输出:

gaurav@ubuntu:~/workspace$ ls ath.html cherrytree_0.37.6-1.1_all.deb emacs-defaults_47.0.tar.xz gaurav@ubuntu:~/workspace$ 

在此输出中,您可以观察到我下载了一个名为‘emacs-defaults_47.0.tar.xz' 在我的 CWD 中,并且在下载过程中进度条显示在终端中。

在 CURL 中恢复中断的下载

很多时候,可能会出现需要下载较大文件的情况。有时由于电源故障或网络故障等原因,下载可能在中途中止,而没有下载完整的文件。即使你按下 Ctrl+C 在终端中,该过程中止。

卷曲 命令与 -C 选项恢复中断的下载。

句法:

curl -C - -O [URL]

例子:

在此插图中,我尝试从 Ubuntu 网站下载 Ubuntu 20.04 ISO 映像。

gaurav@ubuntu:~/workspace$ curl -O //releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso?_ga=2.212264532.1184373179.1600250922-154d %4 平均接收速度 %41570%1时间时间当前下载上传总花费左速度0 2656M 0 1744k 0 0 87038 0 8:53:17 0:00:20 8:52:57 77726^C

在这里,我故意中止了下载过程 Ctrl+C.

现在我将使用 -C 选项与 卷曲 命令从同一源网站恢复中断的下载。

输出:

gaurav@ubuntu:~/workspace$ curl -C - -O //releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso?_ga=2.212264532.1184373179.16002550904373179.16002550900415509041550904155090415509045字节位置 1851392 % Total % Received % Xferd 平均速度时间 时间 当前 Dload 上传总花费 左速度 0 2654M 0 20.2M 0 0 57940 0 13:20:35 0:06:06 13:14:29 98278

下载已从中止处恢复。

使用 CURL 从 FTP 服务器下载文件

这很容易 卷曲 使用命令从 FTP 服务器下载文件 -u 选项。在输入 URL 之前,您必须将用户名和密码放入命令中。

句法:

curl -u [用户名]:[密码] [URL]

为了说明,我将使用在线公共 FTP。

例子:

gaurav@ubuntu:~/workspace$ curl -O -u [email protected]:eUj8GeW55SvYaswqUyDSm5v6N ftp://ftp.dlptest.com/16-Sep-20-16-0-0.csv % Total % Received % Xferd Speed Time Time Time 当前Dload Upload Total Spent Left Speed 100 390 100 390 0 0 93 0 0:00:04 0:00:04 --:--:-- 93 gaurav@ubuntu:~/workspace$

在这里,我下载了一个名为‘16-Sep-20-16-0-0.csv’ 从这个 ftp 服务器并用它的原始名称保存在我的 CWD 中。我将使用 ls 命令。

gaurav@ubuntu:~/workspace$ ls -al total 1092 drwxrwxr-x 3 gaurav gaurav 4096 Sep 16 16:15 。 drwxr-xr-x 87 gaurav gaurav 266240 Sep 16 10:22 .. -rw-r--r-- 1 gaurav gaurav 390 Sep 16 16:15 16-Sep-20-16-0-0.csv -rw- r--r-- 1 gaurav gaurav 204429 Sep 16 11:45 ath.html gaurav@ubuntu:~/workspace$

使用 CURL 一起下载多个文件

一次下载多个文件使用 卷曲 命令是一项非常简单的任务。你只需使用 -O 选项与 卷曲 命令与我们在上述块中执行的方式类似。

句法:

curl -O [URL-1] -O [URL-2] -O[URL-n]

例子:

gaurav@ubuntu:~/workspace$ curl -O //archive.ubuntu.com/ubuntu/pool/universe/a/aegean/aegean_0.15.2+dfsg-1.debian.tar.xz -O //archive.ubuntu. com/ubuntu/pool/main/a/apache2/apache2_2.4.29.orig.tar.gz % Total % Received % Xferd 平均速度时间时间当前 Dload Upload Total Spent Left Speed 100 63500 100 63500 0 0 55458 0 0:00 :01 0:00:01 --:--:-- 55458 100 8436k 100 8436k 0 0 123k 0 0:01:08 0:01:08 --:--:-- 127k gaurav@ubuntu:~/workspace $ 

在这个例子中,我从 Ubuntu 存储库下载了两个不同的包。

输出:

gaurav@ubuntu:~/workspace$ ls -al 总计 9596 drwxrwxr-x 3 gaurav gaurav 4096 Sep 16 16:28 。 drwxr-xr-x 87 gaurav gaurav 266240 Sep 16 10:22 .. -rw-r--r-- 1 gaurav gaurav 390 Sep 16 16:15 16-Sep-20-16-0-0.csv -rw- r--r-- 1 gaurav gaurav 63500 Sep 16 16:28 aegean_0.15.2+dfsg-1.debian.tar.xz -rw-r--r-- 1 gaurav gaurav 8638793 Sep 16 16:24.apache29.2. orig.tar.gz -rw-r--r-- 1 gaurav gaurav 204429 Sep 16 11:45 ath.html gaurav@ubuntu:~/workspace$ 

使用 curl 命令同时下载这两个包。

使用 CURL 获取 URL 的 HTTP 标头

任何 URL 的 HTTP 标头字段都包含有用的信息,如用户代理、内容类型、编码等。这些标头文件还提供有关在消息正文中发送的对象的信息。还可以从这些 HTTP 标头中获取有关请求和响应的详细信息。

您可以使用 卷曲 命令与 -一世 选项来获取 URL 的这些 HTTP 标头。

句法:

curl -I [URL]

例子:

gaurav@ubuntu:~/workspace$ curl -I www.firefox.com HTTP/1.1 200 OK Content-Type: text/html; charset=ISO-8859-1 P3P: CP="这不是 P3P 政策!有关详细信息,请参阅 g.co/p3phelp。"日期:2020 年 9 月 16 日,星期三 11:17:00 GMT 服务器:gws X-XSS-Protection:0 X-Frame-Options:SAMEORIGIN 传输编码:分块 到期:2020 年 9 月 16 日星期三 11:17:00 GMT Cache-控制:private Set-Cookie:1P_JAR=2020-09-16-11;到期=格林威治标准时间 2020 年 10 月 16 日星期五 11:17:00;路径=/;域=.google.com;固定的Set-Cookie:NID = 204 = SpeHTVXkKYwe6uaKYLsPWmCA0A-sGb94c9jpbw067e7uhyeJnkap6TFEIESztwLOEst7KcDSBLgGrokh1EM2IZi2VPVzllH0tsvCu-QbKiunPoPJ6dD7oAnB7rxu30rAiO630vYm6SG1zbmGgxNEiB-adXp24h7iEoSq9WsjrGg;到期=格林威治标准时间 2021 年 3 月 18 日星期四 11:17:00;路径=/;域=.google.com; HttpOnly gaurav@ubuntu:~/workspace$

在这个例子中,我获取了‘的 HTTP 标头www.firefox.com‘.

使用 CURL 获取 C 源代码

使用 卷曲 命令与 --libcurl 选项可以获取 C 源代码。这对外行用户没有太大用处,但可以证明对系统程序员、安全分析师和应用程序开发人员非常有帮助。

句法:

curl [URL] > 文件名 --libcurl [code_filename]

例子:

在这个例子中,我获取了 URL 的内容 万事如意 并将其存储在一个名为 gy_ath.html. C 源代码单独存储在 来源.c 文件。

curl //www.allthings.how > gy_ath.html --libcurl source.c 

输出:

gaurav@ubuntu:~/workspace$ curl //www.allthings.how > gy_ath.html --libcurl source.c % Total % Received % Xferd 平均速度时间时间当前 Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 gaurav@ubuntu:~/workspace$

现在让我们检查下载的文件。

gaurav@ubuntu:~/workspace$ ls -al 总计 404 drwxrwxr-x 3 gaurav gaurav 4096 Sep 16 17:08 。 drwxr-xr-x 87 gaurav gaurav 266240 Sep 16 10:22 .. -rw-r--r-- 1 gaurav gaurav 0 Sep 16 17:13 gy_ath.html -rw-r--r-- 1 gaurav gaurav 1535 9 月 16 日 17:13 source.c gaurav@ubuntu:~/workspace$

来源.c 文件包含源代码。这可以使用终端显示在 命令。我已将输出中的几行放在下面给定的块中。

C sourcegaurav@ubuntu:~/workspace$ cat source.c /********* 由 curl 命令行工具生成的示例代码 ********** * 记录了所有 curl_easy_setopt() 选项在: * //curl.haxx.se/libcurl/c/curl_easy_setopt.html ******************************** ****************************************/ #include int main(int argc, char *argv[]) { CURLcode ret;卷曲 *hnd; hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt(hnd, CURLOPT_URL, "//www.allthings.how"); curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.58.0"); curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);

在 CURL 中使用代理访问 URL

正如引言中所讨论的, 卷曲 命令支持多种协议,如 FTP、SMTP、HTTPS、SOCKS 等。有时当您希望提高传输速度并保护您的身份时,使用代理服务器传输文件变得很重要。 卷曲 命令可以很容易地用于通过附加的代理服务器传输文件 -X 选择它。

例子:

curl -x [proxy_address]:[端口] [URL]

在上面的示例中,我假设您的代理不需要身份验证。如果代理需要身份验证才能开始传输,您可以使用以下命令。

curl -u [用户名]:[密码] -x [代理地址]:[端口] [URL]

使用这种简单的方法,我们可以通过带有选项的代理服务器传输文件 -X卷曲 命令。

结论

在这个简短的教程中,我们学习了如何 卷曲 命令被证明有助于直接从终端下载内容。我们还了解了此命令可用于各种任务的不同选项。