2017-01-02 8 views
0

Пытается просмотреть API-интерфейс Tigerline Shapefiles Департамента США и не получить никакой удачи. Вот что я пробовал:SocketError: getaddrinfo: nodename или servname при попытке доступа к US Census Tigerline Shapefiles FTP-сервер

require 'net/ftp' 
ftp = Net::FTP.new("ftp://ftp2.census.gov/geo/tiger/TIGER2010/BG/2010") 
SocketError: getaddrinfo: nodename nor servname provided, or not known 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/ftp.rb:228:in `initialize' 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/ftp.rb:228:in `open' 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/ftp.rb:228:in `block in open_socket' 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/timeout.rb:74:in `timeout' 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/ftp.rb:223:in `open_socket' 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/ftp.rb:248:in `block in connect' 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize' 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/ftp.rb:247:in `connect' 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/ftp.rb:160:in `initialize' 
    from (irb):2:in `new' 
    from (irb):2 
    from /Users/daviddouglas/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>' 

Это открытый FTP-сервер, с которым я могу получить доступ с помощью своего браузера и других инструментов. Я могу даже напрямую ссылаться на определенные URL-адреса файлов на этом сервере и успешно загружать их с помощью open-uri. Однако указанный выше URL-адрес FTP содержит несколько кривых и отображает кучу неожиданных URL-адресов, поэтому я должен просмотреть его и вернуть список имен файлов для продвижения вперед.

Благодаря

ответ

1

initialize метод Net::FTP класса ожидает имя хоста (или IP) в качестве аргумента, а не с сервера FTP. После examples from the documentation, это должно работать вместо:

ftp = Net::FTP.new('ftp2.census.gov') 
ftp.login 
files = ftp.list('/geo/tiger/TIGER2010/BG/2010') 
# => file listing of the directory 

Пожалуйста см the documentation для Net::FTP класса Подробную информацию о том, как получить доступ к удаленным файлам и каталогам.