使用 curl 從命令行訪問網際網路

2020-10-31 Linux中國

要在不使用圖形界面的情況下從網際網路上獲取所需的信息,curl 是一種快速有效的方法。

• 來源:linux.cn • 作者:Seth Kenlon • 譯者:MjSeven •

(本文字數:4904,閱讀時長大約:6 分鐘)

下載我們整理的 curl 備忘錄。要在不使用圖形界面的情況下從網際網路上獲取所需的信息,curl 是一種快速有效的方法。

curl 通常被視作一款非交互式 Web 瀏覽器,這意味著它能夠從網際網路上獲取信息,並在你的終端中顯示,或將其保存到文件中。從表面看,這是 Web 瀏覽器,類似 Firefox 或 Chromium 所做的工作,只是它們默認情況下會渲染信息,而 curl 會下載並顯示原始信息。實際上,curl 命令可以做更多的事情,並且能夠使用多種協議與伺服器進行雙向傳輸數據,這些協議包括 HTTP、FTP、SFTP、IMAP、POP3、LDAP、SMB、SMTP 等。對於普通終端用戶來說,這是一個有用的工具;而對於系統管理員,這非常便捷;對於微服務和雲開發人員來說,它是一個質量保證工具。

curl 被設計為在沒有用戶交互的情況下工作,因此與 Firefox 不同,你必須從頭到尾考慮與在線數據的交互。例如,如果想要在 Firefox 中查看網頁,你需要啟動 Firefox 窗口。打開 Firefox 後,在地址欄或搜尋引擎中輸入要訪問的網站。然後,導航到網站,然後單擊要查看的頁面。

對於 curl 來說也是如此,不同之處在於你需要一次執行所有操作:在啟動 curl 的同時提供需要訪問的網際網路地址,並告訴它是否要將數據保存在終端或文件中。當你必須與需要身份驗證的網站或 API 進行交互時,會變得有點複雜,但是一旦你學習了 curl 命令語法,它就會變得自然而然。為了幫助你掌握它,我們在一個方便的 備忘錄 中收集了相關的語法信息。

使用 curl 下載文件

你可以通過提供指向特定 URL 的連結來使用 curl 命令下載文件。如果你提供的 URL 默認為 index.html,那麼將下載此頁面,並將下載的文件顯示在終端屏幕上。你可以將數據通過管道傳遞到 less、tail 或任何其它命令:

$ curl "http://example.com" | tail -n 4    <h1>Example Domain</h1>    <p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p>    <p><a href="https://www.iana.org/domains/example">More information...</a></p></div></body></html>

由於某些 URL 包含特殊字符,shell 通常會將其解釋,因此最安全的做法用引號將 URL 包起來。

某些文件無法很好的在終端中轉換顯示。你可以使用 --remote-name 選項使文件根據伺服器上的命名進行保存:

$ curl --remote-name "https://example.com/linux-distro.iso"$ lslinux-distro.iso

或者,你可以使用 --output 選項來命名你想要下載的內容:

curl "http://example.com/foo.html" --output bar.html

使用 curl 列出帶有遠程目錄的內容

因為 curl 不是交互式的,所以很難瀏覽頁面上的可下載元素。如果你要連接的遠程伺服器允許,可以使用 curl 來列出目錄的內容:

$ curl --list-only "https://example.com/foo/"

繼續中斷下載

如果你正在下載一個非常大的文件,你可能會發現有時候必須中斷下載。curl 非常智能,可以確定下載從何處中斷並繼續下載。這意味著,下一次當你下載一個 4GB 的 Linux 發行版的 ISO 出現問題時,就不必重新開始了。--continue-at 的語法有點不尋常:如果你知道下載中斷時的字節數,你可以提供給 curl;否則,你可以使用單獨的一個破折號(-)指示 curl 自動檢測:

$ curl --remote-name --continue-at - "https://example.com/linux-distro.iso"

下載文件序列

如果你需要下載多個文件而不是一個大文件,那麼 curl 可以幫助你解決這個問題。假設你知道要下載的文件的位置和文件名模式,則可以使用 curl 的序列標記:中括號裡是整數範圍的起點和終點。對於輸出文件名,使用 #1 表示第一個變量:

$ curl "https://example.com/file_[1-4].webp" --output "file_#1.webp"

如果你需要使用其它變量來表示另一個序列,按照每個變量在命令中出現的順序表示它們。例如,在這個命令中,#1 指目錄 images_000 到 images_009,而 #2 指目錄 file_1.webp 至 file_4.webp:

$ curl "https://example.com/images_00[0-9]/file_[1-4].webp" --output "file_#1-#2.webp"

從站點下載所有 PNG 文件

你也可以僅使用 curl 和 grep 進行一些基本的 Web 抓取操作,以找到想要下載的內容。例如,假設你需要下載與正在歸檔網頁關聯的所有圖像,首先,下載引用了圖像的頁面。將頁面內通過管道傳輸到 grep,搜索所需的圖片類型(在此示例中為 PNG)。最後,創建一個 while 循環來構造下載 URL,並將文件保存到你的計算機:

$ curl https://example.com |\grep --only-matching 'src="[^"]*.[png]"' |\cut -d\" -f2 |\while read i; do \curl https://example.com/"${i}" -o "${i##*/}"; \done

這只是一個示例,但它展示了 curl 與 Unix 管道和一些基本而巧妙的解析結合使用時是多麼的靈活。

獲取 HTML 頭

用於數據交換的協議在計算機發送通信的數據包中嵌入了大量元數據。HTTP 頭是數據初始部分的組件。在連接一個網站出現問題時,查看這些報文頭(尤其是響應碼)會有所幫助:

curl --head "https://example.com"HTTP/2 200accept-ranges: bytesage: 485487cache-control: max-age=604800content-type: text/html; charset=UTF-8date: Sun, 26 Apr 2020 09:02:09 GMTetag: "3147526947"expires: Sun, 03 May 2020 09:02:09 GMTlast-modified: Thu, 17 Oct 2019 07:18:26 GMTserver: ECS (sjc/4E76)x-cache: HITcontent-length: 1256

快速失敗

響應 200 通常是 HTTP 成功指示符,這是你與伺服器連接時通常期望的結果。著名的 404 響應表示找不到頁面,而 500 則表示伺服器在處理請求時出現了錯誤。

要查看協商過程中發生了什麼錯誤,添加 --show-error 選項:

$ curl --head --show-error "http://opensource.ga"

除非你可以訪問要連接的伺服器,否則這些問題將很難解決,但是 curl 通常會盡力連接你指定的地址。有時在網絡上進行測試時,無休止的重試似乎只會浪費時間,因此你可以使用 --fail-early 選項來強制 curl 在失敗時迅速退出:

curl --fail-early "http://opensource.ga"

由 3xx 響應指定的重定向查詢

300 這個系列的響應更加靈活。具體來說,301 響應意味著一個 URL 已被永久移動到其它位置。對於網站管理員來說,重新定位內容並留下「痕跡」是一種常見的方式,這樣訪問舊地址的人們仍然可以找到它。默認情況下,curl 不會進行 301 重定向,但你可以使用 --localtion 選項使其繼續進入 301 響應指向的目標:

$ curl "https://iana.org" | grep title<title>301 Moved Permanently</title>$ curl --location "https://iana.org"<title>Internet Assigned Numbers Authority</title>

展開短網址

如果你想要在訪問短網址之前先查看它們,那麼 --location 選項非常有用。短網址對於有字符限制的社交網絡(當然,如果你使用 現代和開源的社交網絡 的話,這可能不是問題),或者對於用戶不能複製粘貼長地址的印刷媒體來說是有用處的。但是,它們也可能存在風險,因為其目的地址本質上是隱藏的。通過結合使用 --head 選項僅查看 HTTP 頭,--location 選項可以查看一個 URL 的最終地址,你可以查看一個短網址而無需加載其完整的資源:

$ curl --head --location "<https://bit.ly/2yDyS4T>"

下載我們的 curl 備忘錄

一旦你開始考慮了將探索 web 由一條命令來完成,那麼 curl 就成為一種快速有效的方式,可以從網際網路上獲取所需的信息,而無需麻煩圖形界面。為了幫助你適應到工作流中,我們創建了一個 curl 備忘錄 ,它包含常見的 curl 用法和語法,包括使用它查詢 API 的概述。


via: opensource.com

作者: Seth Kenlon 選題: lujun9972 譯者: MjSeven 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出

點擊「了解更多」可訪問文內連結

相關焦點

  • Linux下curl命令的使用
    前言在Linux下,curl是一個綜合傳輸工具,既可以用來上傳文件,也可以用來下載文件,在日常使用過程中,它通常都是以下載工具的角色出現,常用來檢驗一個網址是否可以訪問。與curl命令相似的,還有wget命令,二者在功能上具有很多類似的地方,但curl由於可自定義各種請求參數所以在模擬web請求方面更擅長;wget由於支持ftp和Recursive所以在下載文件方面更擅長。curl命令的使用1.使用curl訪問一個網址(最基本用法)在命令行中輸入「curl 網址」即可在命令顯示界面顯示該網址的內容。
  • cUrl命令行工具下載使用心得及常用參數解釋
    主要的區別在於wget默認是保存到文件,而curl將輸出定向到命令行上。這使得curl能非常方便的查看站點的內容。我這裡這裡下載curl-7.59.0-win32-mingw.zip,下載完成之後解壓到需要使用curl命令的目錄。這裡為了方便我先直接解壓到當前目錄。3. 打開命令窗口並定位到curl命令所在的目錄,你可以使用cd命令也可以像下圖這樣快速進入:比如:cd f:\curl\bin4.
  • Linux常用命令 - curl
    curl 是一個命令行實用程序,用於將數據從伺服器或傳輸到伺服器,該伺服器設計用於在沒有用戶交互的情況下工作。使用 curl,您可以使用支持的協議(包括 HTTP、 HTTPS、 SCP、 SFTP 和 FTP)下載或上傳數據。 curl 提供了許多選項,允許您恢復傳輸、限制帶寬、代理支持、用戶認證等等。
  • Linux 常見命令 curl的高級用法---curl 格式化輸出
    Linux 常見命令 curl的高級用法---curl 格式化輸出前言Curl 命令是在運維過程中,非常常見的命令,cURL是一個利用URL語法在命令行下工作的文件傳輸工具,1997年首次發行。它支持文件上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱cURL為下載工具。cURL還包含了用於程序開發的libcurl。
  • linux-好用的curl命令
    在Linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,可以說是一款很強大的http命令行工具。它支持文件的上傳和下載,是綜合傳輸工具,但按傳統,習慣稱url為下載工具。,也意味著沒有瀏覽器,因此這個方法也經常用於測試一臺伺服器是否可以到達一個網站2、保存訪問的網頁2.1:使用linux的重定向功能保存# curl http://www.linux.com >> linux.html2.2:可以使用curl的內置option:-o(小寫)保存網頁$ curl -o linux.html
  • curl使用指南
    curl是一個命令行工具,通過指定的URL來上傳或下載數據,並將數據展示出來。curl中的c表示client,而URL,就是URL。這裡我們介紹一下curl的使用。1. 命令行基礎1.1 命令行選項1.
  • 終端命令行之Web瀏覽器
    Linux命令行是強大的工具,命令行是我們的日常工作,命令行更是我們日常生活。之前蟲蟲給大家寫過一些命令的的介紹,命令行的工具,命令行下的開發。實際上命令行也是我們不可或缺的生活。本文我們來介紹一下命令行下的網絡衝浪工具命令行瀏覽器。lynxlynx一個歷史悠久純文本web瀏覽器,最初發布可能是上世紀90年代的1997年。
  • curl 命令詳解
    常用參數分類 常用curl實例 我們還可以用正則來抓取東西 模擬用戶登錄 模擬表單信息,模擬登錄,保存cookie信息 模擬表單信息,模擬登錄,保存頭信息 -c(小寫)產生的cookie和-D裡面的cookie是不一樣的 使用
  • 終端命令行生存之——網絡衝浪篇
    Linux命令行是強大的工具,命令行是我們的日常工作,命令行更是我們日常生活。之前蟲蟲給大家寫過一些命令的的介紹,命令行的工具,命令行下的開發。實際上命令行也是我們不可或缺的生活。本文我們來介紹一下命令行下的網絡衝浪工具命令行瀏覽器。
  • Linux值curl基本用法
    頭條號:浩渺煙波curl 是一個很強大的命令行工具。你可以把 CURL 想像成一個精簡的命令行網頁瀏覽器。它支持幾乎你能想到的所有協議,可以交互訪問幾乎所有在線內容。唯一和瀏覽器不同的是,cURL 不會渲染接收到的相應信息。
  • curl 和Wget功能比較
    用過Linux和命令行的人可能都知道Wget和Curl,很多碼農可能都用Curl寫過程序,但是要說兩者的區別可能很多人說不上了。本文我們對兩者進行一個比較。共同點兩者都是命令行工具,可以從FTP,HTTP和HTTPS下載內容。
  • 站長在windows下 使用CURL推送連結
    1、新建一個urls.txt文件放到任意盤符下,為了方便可以直接扔到C:\Windows\System32 如下圖:這樣打開cmd就可以直接curl命令了 如果urls.txt跟curl.exe不是同一路徑,要輸入正確的目錄。。
  • 使用命令行瀏覽器在 Linux 終端上網瀏覽
    然而,在以前,人們使用終端來獲取資源和瀏覽網頁,因為所有的東西大多是基於文本的。雖然現在不能從終端上獲取每個信息,但對於一些文本信息,還是可以嘗試使用命令行瀏覽器,從 Linux 終端上打開網頁。幸運的是,很多的網站在使用 Lynx 時往往能正常工作,所以我說它在這方面肯定更好。我能夠加載 DuckDuckGo,並使其工作。除此之外,我還注意到它可以讓你在訪問各種 Web 資源時接受或拒絕 cookie。你也可以將它設置為總是接受或拒絕。所以,這是件好事。
  • 學習Linux——從訪問命令行開始
    圖形登錄圖形界面進入終端,訪問命令行】註:訪問shell的另一種方式是通過虛擬控制臺。>命令歷史1)查看歷史命令history2)使用!eg:如執行以下的命令後,按ctrl+r,然後輸入usera,即可查找到以usera開頭的命令[root@desktop0 ~]# useradd -u 3000 -g root -s /sbin/nologin usera如果想修改查找出來的命令,使用左右方向鍵即可
  • 3分鐘短文|Linux 使用curl發起post請求的4個常用方式
    引言cURL是一種命令行實用程序,用於使用一種受支持的協議,從遠程伺服器傳輸數據,或將數據傳輸到遠程伺服器。默認情況下,已安裝在macOS和大多數Linux發行版上。開發人員可以使用cURL來測試API接口,查看響應頭和發出HTTP請求。在本文中,我們將解釋如何使用cURL發出POST請求。
  • 利用Linux命令cURL實現文件定時上傳到ftp伺服器的小程序,實用
    並當時使用的一個超級強大的工具cURL。心血來潮,決定專門寫一篇文章,送給需要的朋友。概念cURL 是常用的命令行工具,用來請求 Web 伺服器。它的名字就是客戶端(client)的 URL 工具的意思。
  • Curl即將支持HSTS
    全面HTTPS化是目前網際網路的共識,基本上目前所有的瀏覽器均已經將使用HTTP協議或者部分HTTPS的站點表示為了不安全。而且實現全面HTTPS化有一個協議很關鍵,那就是HSTS協議,而HSTS有賴於各個Web伺服器和瀏覽器客戶端的支持,本文我們就來說說即將發布Curl7.74對HSTS的支持。
  • Linux curl命令在監控中的應用
    文章配圖今天寫這篇水文,是源於昨天晚上睡覺前的一個郵件告警,從事網際網路IT技術的請問有幾人能睡好覺?在我所管轄的一臺非重要伺服器上,跑了一個PHP應用,好像在我部署好之後,就忘記它的存在了。正是在這種懶惰的情懷下,我寫了一個簡短的腳本來完成這個任務,主要使用Linux curl命令來完成檢測PHP程序是否正常。關於檢測方法,有些大佬會通過探測php-fpm進程是否存在來標記,有些會通過檢測埠來完成,另外一種就是我這種了。通過檢測PHP程序是否能完成正常的功能性輸出來達到。功能性輸出你可以認為是通過程序輸出一個特定字符串或者http狀態碼。
  • AWS提供基於WEB的命令行訪問途徑
    打開APP AWS提供基於WEB的命令行訪問途徑 cnBeta.COM 發表於 2020-12-16 16:12:35 亞馬遜雲服務(AWS)今日正式推出了基於 Amazon Linux 2 的 CloudShell 服務,旨在為用戶提供基於 Web 的功能齊全的命令行訪問途徑。
  • 推薦給開發人員的實用命令行工具
    問題可能無處不在,可能是你發送的請求出了錯,可能是回復出了錯,可能是你使用的某個第三方庫出了問題,又或者是一個外部API調用失敗了。優秀的工具對於定位問題出在何處有著無可估量的價值,而且能在一開始就幫助我們阻止問題的出現,總的來說能使我們的工作更有效率。命令行工具尤其有用,因為它們非常易於做自動化和腳本處理,能夠以各種不同的方式進行組合和重用。