Merhabalar,
Bugün yazımızda Ruby’nin ağ(network) ve genel ağ(web) kütüphanelerini inceleyeceğiz. Bu kütüphaneleri, mail gÖndermek, ftp ile başka bir makinaya dosya kaydetmek, herhangi bir başka web sitesininden bir sayfayı okumak veya düşük seviyeli (socket bazlı) işlemler yapmak için kullanabiliriz.
Bu yazımda, tabii sizlerde izin verirseniz, düşük seviyeli bağlantılar (Socket, BasicSocket, IPSocket, TCPSocket, SOCKSSocket.. vb.) yerine, yüksek seviyeli bağlantılardan HTTP ve FTP’yi incelemek istiyorum. Özellikle bu tür yüksek seviyeli bağlantılar için Ruby’nin gerçekten güçlü silahları vardır, bu silahlar ile pek çok uygulamayı zorlanmaksızın yazabilir, pek çok problemini kolayca çÖzebilirsiniz.
Öncelikle FTP sınıfını inceleyelim;
Bir Örnek yapalım; Herhangi FTP sunucusunda yer alan belirli bir dosyaları indirelim, değişiklik yapalım ve daha sonra geri gÖnderelim.
[ruby]
require ‘net/ftp’
include Net
srv = nil
file = nil
begin
srv = FTP.open(“10.0.0.4”, “ruby”, “ruby”) # Bağlantı kuruluyor.
puts srv.welcome # Hoşgeldin mesajı yazdırılır.
srv.chdir(‘\ftproot’) # çalışılacak dizin belirtilir.
puts srv.list # Dizin içerisinde yer alan dosyalar tanımlanır.
# dosya.txt dosyası indirilir.
srv.gettextfile(“dosya.txt”, “d:\\All download\\dosya.txt”)
# dosya.txt açılır.
file = File.open(“d:\\All download\\dosya.txt”, “r+”)
file << "Bizi belli edecek herhangi bir isim veya buna benzer birşey."
file.close
# FTP sunucusuna geri gÖnderilir.
srv.puttextfile("d:\\All download\\dosya.txt", "dosya.txt")
puts "İşlem tamamlandı."
ensure
srv.close if srv
file.close if file && file.closed? == false
end
[/ruby]
HTTP konusuna gelince;
Günümüzde 'spider' olarak adlandırılan sayfalarda yer alan linkleri takip eden programları duymuşsunuzdur, işte bu tarz uygulamalarda kullanılan bir yÖntem vardır. Safyalar üzerinde yer alan 'a' tagı ile verilmiş linkleri bulalım.
[ruby]require 'net/http'
# esiyo.net'e 80 no'lu porttan bağlantı açılır.
esiyo = Net::HTTP.new('esiyo.net', 80)
# '/' yani root'ta yer alan sayfa istenir.
resp, data = esiyo.get('/', nil )
if resp.message == "OK" # sayfanın istenmesinde problem yok ise,
# Tüm linkleri listeleyelim..!
# Regular Expression kullanılarak 'src' bilgileri elde edilir.
data.scan(/