2014-02-24 2 views
1

Я пытаюсь получить рубин, чтобы прочитать источник URL-адреса, который размещается на моем собственном компьютере. Я попытался с помощью открытого URI камня с:Как использовать ruby ​​для чтения источника uri, который im хостинг на моем собственном компьютере?

source = open('http://127.0.0.1:8000/wikipedia_en_all_nopic_01_2012/A/Mick%20Jagger.html', &:read) 

с нормальными внешними URL' это работает нормально, но это вызывает множественные ошибки, когда я пытаюсь получить доступ к URL-адрес IM-хостинг на моем компьютере. Кто-нибудь знает, как это сделать? Heres отчет команды ошибка линии:

/Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/response.rb:357:in `finish': incorrect header check (Zlib::DataError) 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/response.rb:357:in `finish' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/response.rb:262:in `ensure in inflater' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/response.rb:262:in `inflater' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/response.rb:274:in `read_body_0' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/response.rb:201:in `read_body' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:328:in `block (2 levels) in open_http' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http.rb:1415:in `block (2 levels) in transport_request' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/response.rb:162:in `reading_body' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http.rb:1414:in `block in transport_request' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http.rb:1405:in `catch' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http.rb:1405:in `transport_request' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http.rb:1378:in `request' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:319:in `block in open_http' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http.rb:853:in `start' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:313:in `open_http' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:723:in `buffer_open' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:210:in `block in open_loop' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:208:in `catch' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:208:in `open_loop' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:149:in `open_uri' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:703:in `open' 
from /Users/rorycampbell/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/open-uri.rb:34:in `open' 
from testurl.rb:6:in `<main>' 

UPDATE: Я использую сервер kiwix разместить у себя URL-адрес

+1

ли работа, если вы используете 'curl' в оболочке ? –

+1

Это просто трассировка стека в точке ошибки, пожалуйста, разместите сообщение об ошибке, которое вы получите. – toro2k

+0

Я добавил ошибку. Использование curl в shell отлично работает. –

ответ

1

Попробуйте использовать net/http вместо этого.

require 'net/http' 
source = Net::HTTP.get URI.parse('http://127.0.0.1:8000/wikipedia_en_all_nopic_01_2012/A/Mick%20Jagger.html') 
+0

Нет радости - это дает мне точно такую ​​же ошибку. –

+0

Интересно. Я попробовал открыть, и ничего не сделал для меня, поэтому я попробовал сеть http и смог запросить мой местный. Я использовал localhost, а не IP, но это не имеет значения. – agmcleod

+0

Я новичок в рубине, поэтому не уверен, но из того, что я прочитал, я считаю, что в понимании кодировки была ошибка. Тем не менее, камень HTTparty работал нормально. –

0

Почему вы хотите использовать URL-адрес, если он находится на локальной машине? Почему бы просто не дать путь?

Эта ошибка звучит так, как будто что-то не так с фактическим файлом, который вы пытаетесь разобрать, или тем способом, которым он служит. Из чтения о сервере Kiwix это звучит как последнее ... На сайте Kiwix говорится, что он использует какой-то метод сжатия типа openzim, который, скорее всего, почему open-uri не может найти способ его разобрать.

Вы можете попробовать nokogiri и посмотреть, есть ли проблема в его синтаксическом анализе. Но поскольку кажется, что вы пытаетесь открыть/манипулировать zim-файлом в ruby, я бы поискал zim-библиотеку для ruby ​​вместо того, чтобы пытаться ее обслуживать.

Здесь: https://github.com/chrisistuff/zim-ruby

Я никогда не имел дело с kiwix/Zim, так что я не знаю, если это работает, но это был только один поиск Google для «зим рубин» вернулся с ,

0

У меня была такая же проблема с киви. Я извлек все URL-адреса в файле с именем hrefs.txt (в моем случае это был немецкий проект Гутенберг) и использовали wget для загрузки каждого из них:

f = File.open("hrefs.txt", "r") 
f.each_line do |url| 
    #filename = url.split("/").last.gsub!(/[^A-Za-z]/, '')[0..-4] 
    system "wget #{url}" 
end 
f.close