首頁 > 軟體

用膩了 wget 或 curl,有什麼更好的替代品嗎?

2020-06-16 18:00:00

如果你經常需要通過終端以非互動模式存取網路伺服器(例如,從網路上下載檔案,或者是測試 RESTful 網路服務介面),可能你會選擇的工具是 wget 或 curl。通過大量的命令列選項,這兩種工具都可以處理很多非互動網路存取的情況(比如這裡這裡,還有這裡)。然而,即使像這些一樣的強大的工具,你也只能發揮你所了解的那些選項的功能。除非你很精通那些繁冗的語法細節,這些工具對於你來說只不過是簡單的網路下載器而已。

就像其宣傳的那樣,“給人用 curl 類工具”,HTTPie 設計用來增強 wget 和 curl 的可用性。它的主要目標是使通過命令列與網路伺服器進行互動的過程變得盡可能的人性化。為此,HTTPie 支援具有表現力、但又很簡單很直觀的語法。它以彩色模式顯示響應,並且還有一些不錯的優點,比如對 JSON 的良好支援,和永續性對談用以作業流程化。

我知道很多人對把像 wget 和 curl 這樣的無處不在的、可用的、完美的工具換成完全沒聽說過的軟體心存疑慮。這種觀點是好的,特別是如果你是一個系統管理員、要處理很多不同的硬體的話。然而,對於開發者和終端使用者來說,重要的是效率。如果我發現了一個工具的使用者更佳替代品,那麼我認為採用易於使用的版本來節省寶貴的時間是毫無疑問的。沒有必要對替換掉的工具保持信仰忠誠。畢竟,對於 Linux 來說,最好的事情就是可以選擇。

在這篇文章中,讓我們來了解並展示一下我所說的 HTTPie,一個使用者友好的 wget 和 curl 的替代。

 

在 Linux 上安裝 HTTPie

HTTPie 是用 Python 寫的,所以你可以在幾乎所有地方(Linux,MacOSX,Windows)安裝它。而且,在大多數的 Linux 發行版中都有編譯好的安裝包。

 

Debian,Ubuntu 或者 Linux Mint:

  1. $ sudo apt-get install httpie

 

Fedora

  1. $ sudo yum install httpie

 

CentOS/RHEL:

首先,啟用EPEL 倉庫,然後執行:

  1. $ sudo yum install httpie

對於任何 Linux 發行版,另一個安裝方法時使用pip

  1. $ sudo pip install --upgrade httpie

 

HTTPie 的例子

當你安裝完 HTTPie 後,你可以通過輸入 http 命令來呼叫它。在這篇文章的剩餘部分,我會展示幾個有用的 http 命令的例子。

 

例1:客製化頭部

你可以使用 <header:value> 的格式來客製化頭部。例如,我們傳送一個 HTTP GET 請求到 www.test.com ,使用客製化使用者代理(user-agent)和來源(referer),還有客製化頭部(比如 MyParam)。

  1. $ http www.test.com User-Agent:Xmodulo/1.0Referer:http://xmodulo.com MyParam:Foo

注意到當使用 HTTP GET 方法時,就無需明確指定 HTTP 方法。

這個 HTTP 請求看起來如下:

  1. GET / HTTP/1.1
  2. Host: www.test.com
  3. Accept:*/*
  4. Referer: http://xmodulo.com
  5. Accept-Encoding: gzip, deflate, compress
  6. MyParam: Foo
  7. User-Agent: Xmodulo/1.0

 

例2:下載檔案

你可以把 http 作為檔案下載器來使用。你需要像下面一樣把輸出重定向到檔案。

  1. $ http www.test.com/my_file.zip > my_file.zip

或者:

  1. $ http --download www.test.com/my_file.zip

 

例3:客製化 HTTP 方法

除了預設的 GET 方法,你還可以使用其他方法(比如 PUT,POST,HEAD)。例如,傳送一個 HTTP PUT 請求:

  1. $ http PUT www.test.com name='Dan Nanni' email=dan@email.com

 

例4:提交表單

使用 http 命令提交表單很容易,如下:

  1. $ http -f POST www.test.com name='Dan Nanni' comment='Hi there'

'-f' 選項使 http 命令序列化資料欄位,並將 'Content-Type' 設定為 "application/x-www-form-urlencoded; charset=utf-8"。

這個 HTTP POST 請求看起來如下:

  1. POST / HTTP/1.1
  2. Host: www.test.com
  3. Content-Length:31
  4. Content-Type: application/x-www-form-urlencoded; charset=utf-8
  5. Accept-Encoding: gzip, deflate, compress
  6. Accept:*/*
  7. User-Agent: HTTPie/0.8.0
  8. name=Dan+Nanni&comment=Hi+there

 

例5:JSON 支援

HTTPie 內建 JSON(一種日漸普及的資料交換格式)支援。事實上,HTTPie 預設使用的內容型別(content-type)就是 JSON。因此,當你不指定內容型別傳送資料欄位時,它們會自動序列化為 JSON 物件。

  1. $ http POST www.test.com name='Dan Nanni' comment='Hi there'

這個 HTTP POST 請求看起來如下:

  1. POST / HTTP/1.1
  2. Host: www.test.com
  3. Content-Length:44
  4. Content-Type: application/json; charset=utf-8
  5. Accept-Encoding: gzip, deflate, compress
  6. Accept: application/json
  7. User-Agent:HTTPie/0.8.0
  8. {"name":"Dan Nanni","comment":"Hi there"}

 

例6:輸出重定向

HTTPie 的另外一個使用者友好特性是輸入重定向,你可以使用緩衝資料提供 HTTP 請求內容。例如:

  1. $ http POST api.test.com/db/lookup < my_info.json

或者:

  1. $ echo '{"name": "Dan Nanni"}'| http POST api.test.com/db/lookup

 

結束語

在這篇文章中,我介紹了 HTTPie,一個 wget 和 curl 的可能替代工具。除了這裡展示的幾個簡單的例子,你可以在其官方網站上找到 HTTPie 的很多有趣的應用。再次重複一遍,一款再強大的工具也取決於你對它的了解程度。從個人而言,我更傾向於 HTTPie,因為我在尋找一種更簡潔的測試複雜網路介面的方法。

你怎麼看?


via: http://xmodulo.com/wget-curl-alternative-linux.html

作者:Dan Nanni 譯者:wangjiezhe 校對:wxy

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

來源:http://linux.cn/article-5479-1.html

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-05/117812.htm


IT145.com E-mail:sddin#qq.com