Update(2009/8/12): 加上 open-uri
Update(2010/1/18): 加上 Weary
Update(2010/5/10): github.com/maccman/nestful
Update(2010/5/11): seattlerb.rubyforge.org/net-http-persistent/
透過 HTTP 抓取資料是一個常見的任務,即使只是最基本 GET 網頁,在 Ruby 社群之中也有蠻多選擇的,目前市面上我看到的方案有:
- Standard Library 裡面的 net/http
- Standard Library 裡面的 open-uri
- rest-client
- httparty
- typhoeus
- patron
- curb
- httpclient
- Weary
open-uri 是 net/http, net/https 跟 net/ftp 的簡易 wrapper,可以 GET 網頁當作 IO 物件處理。
rest-client 跟 httparty 也都是基於 net/http 的實做,最大的特點在於 API 的改良及簡化,像 httparty 就做成 module 的形式,讓你可以用 include HTTParty 撰寫你自己的 library。如果只是單純的 REST 操作,使用 rest-client 也是不錯的選擇。
typhoeus, patron, curb 則是基於 libcurl 的實做,與 net/http 相比則大大地增加了程式效能。根據 Matt Aimonetti 的補充 (BTW,他是要說得是,重新發明輪子沒什麼不對,因為實做細節人人不同啊。),typhoeus 的強項是有 callback 機制及 non-blocking-multi query,而 patron 在於可以方便地 reuse HTTP session/connection。而 curb 最簡單只單純想做 libcurl 的 Ruby bindings。
httpclient 很奇怪我竟然找不到什麼的英文資源介紹,但好像也不奇怪因為作者是日本人 :p (另一個教訓是 Project 名字要取特別一點,越奇怪越好搜尋到 XD) 怎麼說呢? 去過一趟 RubyKaigi 之後發現日本的 Ruby 社群還蠻不為外(國)人知的,因為人口多加上又是 Ruby 原產国,所以是有不少的国產厲害 Ruby projects 跟 Ruby 書,而形成一個除了有 open source users 也有 open source developers 的健康社群,但是因為語言隔閡的關係,這些資訊產出絕少輸出到國外去,不像歐美的資源因為英文是共通語言的關係,全世界都能很容易的接觸到。英翻日的 Ruby/Rails 書也非常多,Pragmatic 跟 O’Reilly 的書我幾乎都有看到有日文版 (真好 :~)。
回到 httpclient,我是在 Ruby 逆引きレシピ 這本書中看到的 (well, 我看不懂日文, 只是瞎看 ruby code 而已),安裝方式意外簡單也是用 gem install httpclient 即可,強項看起來有 Cookies support 和 streaming POST (POST with File/IO) 檔案上傳。