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.
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: