Linux curl 命令有哪些常見用法?
curl是最流行的web請求工具,3大主流操作系統帶有curl,一些手機移動端系統也提供了curl,通過命令行下載文件和發起網頁請求,簡單好用YYDS!
curl 是一種從服務器傳輸數據或向服務器傳輸數據的工具,使用的協議包括 協議(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、 imaps、ldap、ldaps、pop3、pop3s、rtmp、rtsp、scp、sftp、smtp、smtps、 TELNET 和 TFTP)。該命令無需用戶干預。
curl 提供了大量有用的功能,如支持代理、用戶授權、訪問FTP和TFTP上傳下載、HTTP請求、SSL 連接、攜帶Cookie、文件傳輸斷點續傳、Metalink請求等。正如你在下文中看到的,curl支持的功能可謂大而全。
curl還提供了libcurl,以庫的形式封裝了所有與傳輸相關的功能。
curl 的用法規則
curl 命令允許您在 Linux 中通過命令行下載和上傳數據。其語法如下:
curl [options] [URL...]
可通過curl --help 命令,就像大部分其他命令的--help那樣,可以自助查詢該命令的常見參數:
-d, --data <data> HTTP POST 數據
-f, --fail HTTP錯誤時安靜地失敗(完全不打印錯誤)
-h, --help <category> 獲取命令幫助
-i, --include 在輸出中包含協議響應標頭
-o, --output <file> 輸出寫入到文件而不是 stdout
-O, --remote-name 將輸出寫入名為遠程文件的文件中
-s, --安靜模式
-T,--upload-file <file> 將本地文件傳輸到目的地
-u, --user <user:password> 服務器用戶和密碼
-A、--user-agent <name> 發送 User-Agent <name> 到服務器
-v,--verbose 使操的作反饋更加詳盡顯示
-V, --version 顯示版本號
--help值顯示部分參數。curl還支持很多高級功能,Linux下可通過:
man curl
命令查看完整的幫助文檔對curl所有參數的解釋(例如跟隨重定向的-L參數,只在man curl 的完整幫助信息中有顯示 )。
通過下面的例子,你可以更直觀地了解curl的常見功能是如何工作的。
問題1:curl 命令如何工作?
curl的基本用法相當簡單 —— 只需將 URL 作為輸入傳遞給 curl 命令,然后將輸出重定向到文件即可。
例如,將下載的文件數據保存為本地的ubuntu2204-64.torrent文件:
curl http://www.zmynmublwnt.cn/uploads/allimg/ba02rgiwcxp.torrent > ubuntu2204-64.torrent
請注意,您也可以在此處使用 -o 選項(作為對比,linux的另一個著名下載工具wget的參數是-O,大O,而curl的是小o)。
-o, --output <file>
Write output to <file> instead of stdout.
回到我們的示例,當數據下載到系統上的ubuntu2204-64.torrent文件中時,在命令行上生成了以下輸出:
在操作過程中,curl 通常會顯示進度表,顯示傳輸的數據量、傳輸速度和預計剩余時間等。
默認情況下,curl 會將這些數據顯示到終端。但如果你調用curl進行文件下載或顯示下載內容到終端, 就會不顯示進度表,以免把進度表和響應數據混在一起,擾亂輸出。
如果你想在 HTTP POST 或 PUT 請求中使用進度表,你需要 使用 shell 重定向 (>)、-o [文件]或其他類似方法,就可以將輸出和顯示分離。例如:
$ curl http://www.zmynmublwnt.cn/uploads/allimg/4wtclpevo15.com > linuxlibs.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 16981 0 --:--:-- --:--:-- --:--:-- 17083
FTP 上傳的情況則不同,因為該操作不會向終端顯示任何響應數據。
問題2:如何使用 curl 下載多個文件?
只需按以下方式傳遞 URL:
curl -O [URL1] -O [URL2] -O [URL3] ...
下載時顯示的進度條會包含多個文件的下載進度:
問題3:如何解決請求地址轉移/重定向問題?
當你用curl 請求一些網站的 URL 時,可能會收到“已轉移”(301 Moved)或“永久重定向(301 Moved Permanently)”等提示。這通常發生在訪問的 URL 被重定向到其他 URL 時。例如,您打開一個網站(如 curl -I http://www.zmynmublwnt.cn/uploads/allimg/d040q54qi0a),它會顯示重定向到你所在國家/地區的 URL(如 https://cn.bing.com)。
$ curl -I http://www.zmynmublwnt.cn/uploads/allimg/d040q54qi0a
HTTP/2 301
content-length: 0
location: http://www.zmynmublwnt.cn/uploads/allimg/2z1bayzf3nf
accept-ch: Sec-CH-UA-Arch, …… Sec-CH-UA-Platform-Version
x-msedge-ref: Ref A: ……
date: …… Dec 2023 ……
如果希望 curl 跟隨重定向,請改用 -L 命令行選項。
問題4:curl在下載文件中斷后,如何繼續從中斷點恢復下載(斷點續傳)?
有時,下載會在兩者之間中斷。為了節省時間和數據,你希望再次嘗試時,能從中斷的點開始。Curl 允許你使用 -C 命令行選項來執行此操作。例如:
curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso
圖顯示了 curl 命令在中斷后恢復下載。
問題5:curl如何模擬瀏覽器發起下載請求,將請求結果保存到linuxlibs.index.html文件:
curl --user-agent "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.61" -o linuxlibs.index.html http://www.zmynmublwnt.cn/uploads/allimg/4wtclpevo15.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 36960 0 36960 0 0 13719 0 --:--:-- 0:00:02 --:--:-- 13719