Il protocollo FTP è implementato dalla classe Net::FTP
della libreria "net/ftp" che offre oltre ai comandi standard altre utili funzionalità.
require 'net/ftp' ftp = Net::FTP.new('ftp.example.com') ftp.login ftp.chdir('pub/') ftp.list('*') {|file| puts file} ftp.gettextfile('README') ftp.getbinaryfile('software.gz') ftp.close
Apriamo la connessione passando l'indirizzo a new
, poi effettuiamo il login, si noti che chiamando login senza argomenti si esegue un accesso anonimo, per accedere come utente vanno specificate le credenziali di accesso: username e password
ftp.login('admin', 'secret')
Dopodiché effettuaimo delle operazioni utilizzando i metodi chdir
e list
che eseguono gli omonimi comandi FTP. Infine utilizziamo entrambi i metodi get per scaricare un file di testo e un file binario; per caricare i file sul server vanno utilizzati i rispettivi metodi put: putbinaryfile
e puttextfile
.
In alternativa, per aprire una connessione, è possibile usare open con un blocco in questo modo:
Net::FTP.open('ftp.example.com') do |ftp| ftp.login ftp.list('*') end
Nella prossima lezione esamineremo una libreria che rappresenta una valida alternativa a Net::HTTP
e a Net::FTP
.
open-uri
Essenzialmente la libreria open-uri estende il metodo open permettendo di passare come file da aprire una stringa contenente un URL HTTP o FTP. Inoltre sono applicabili all'oggetto restituito alcuni utili metodi e attributi che forniscono informazioni sulla richiesta effettuata aperta, come ad esempio charset, content_encoding
, content_type
, last_modified
, base_uri
, meta
e status
. Un esempio è il seguente:
require 'open-uri' open('http://www.google.it') do |res| res.meta.each {|k,v| puts "#{k}: #{v}"} end
Il risultato sarà qualcosa del genere:
cache-control: private content-type: text/html; charset=ISO-8859-1 date: Mon, 13 Aug 2007 10:52:48 GMT server: gws transfer-encoding: chunked
L'attributo meta
è un hash che rappresenta l'header. Invece per mostrare il contenuto della pagina si può utilizzare il metodo read
oppure gets
nel modo opportuno.