Ruby模塊OpenURI獲取HTTP/FTP地址內(nèi)容
Ruby中有一些特殊的模塊是比較有用的。比如在這里為大家介紹的Ruby模塊OpenURI ,就是一種比較常見的Ruby模塊。我們需要熟練的掌握其特性。#t#
Ruby中獲取一個(gè)HTTP/FTP地址的內(nèi)容,有一個(gè)非常方便的方法,就是使用open-uri庫。
Ruby模塊OpenURI是ruby的標(biāo)準(zhǔn)附加庫中所帶的,路徑是:lib/oepn-uri.rb
引用了該附加庫后,就可以像打開普通文件那樣打開一個(gè)http/ftp的uri的資源。
Ruby模塊OpenURI有區(qū)別的地方在這里:
- require 'open-uri'
- open('c:/boot.ini'){|file|
- puts file.class #File
- }
- open('http://coderlee.
cnblogs.com'){|file| - puts file.class #Tempfile
- }
可以看出,打開一個(gè)本機(jī)文件的塊參數(shù)是File類型,而打開一個(gè)uri的塊參數(shù)是一個(gè)Tempfile類型。
還有一點(diǎn)要注意,就是open-uri里面的open方法會(huì)自動(dòng)對(duì)302 redirection重定向地址進(jìn)行追蹤訪問,而Net::HTTP#get方法則不會(huì)自動(dòng)追蹤302重定向地址。
該函數(shù)最后返回的值,是傳入的代碼塊最后的值。 可以這樣獲得Ruby模塊OpenURI的內(nèi)容
- data = open('http://coderlee.
cnblogs.com'){|f| f.read}- data = open('http://coderlee.
cnblogs.com'){|f| f}.open.read
第二句的open的原因是:open方法返回的流,是已經(jīng)關(guān)閉了的tempfile,所以要先open打開流,返回打開的流,再調(diào)用read讀取。