OpenURI - 500 Внутренняя ошибка сервера в канале XML - PullRequest
1 голос
/ 05 мая 2011

Я пытаюсь прочитать XML Stanford ecorner:

open("http://ecorner.stanford.edu/RecentlyAdded.xml")

но я получаю следующее сообщение об ошибке:

OpenURI::HTTPError: 500 Internal Server Error
    from /usr/local/lib/ruby/1.8/open-uri.rb:277:in `open_http'
    from /usr/local/lib/ruby/1.8/open-uri.rb:616:in `buffer_open'
    from /usr/local/lib/ruby/1.8/open-uri.rb:164:in `open_loop'
    from /usr/local/lib/ruby/1.8/open-uri.rb:162:in `catch'
    from /usr/local/lib/ruby/1.8/open-uri.rb:162:in `open_loop'
    from /usr/local/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
    from /usr/local/lib/ruby/1.8/open-uri.rb:518:in `open'
    from /usr/local/lib/ruby/1.8/open-uri.rb:30:in `open'
    from (irb):65
    from :0

Полагаю, но я могу ошибаться, это потому, что мне нужно войти в систему, чтобы использовать канал.

Какой обходной путь я мог бы использовать?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

В случае, если вы не вошли в систему, вы должны получить HTTP-код ответа 401 Unauthorized, а не 500. Я пытался открыть сайт в браузере, который работает. Оказывается, их веб-сервер не любит отсутствующих пользовательских агентов, поэтому, если вы добавите, что open-uri работает:

>> require 'open-uri' 
#=> true
>> open("http://ecorner.stanford.edu/RecentlyAdded.xml", 'User-Agent' => 'ruby') 
#=> #<File:/var/folders/H9/H9qnar1yGZqBrWFGuTE0RU+++TI/-Tmp-/open-uri20110505-25566-zsc3pd-0>
0 голосов
/ 05 мая 2011

Это работает для меня:

require 'open-uri'
require 'nokogiri'

doc = Nokogiri::XML(open('http://ecorner.stanford.edu/RecentlyAdded.xml'))
puts doc.search('title').map{ |n| n.text }

>> Recently Added STVP Entrepreneurship Corner Materials
>> STVP Entrepreneurship Corner
>> Podcast: Developing Products that Save Lives - Richard Scheller (Genentech)
>> Podcast: How to Build Instant Connections - Ori Brafman (Author)
>> Podcast: A New Vision for Capital Markets - Barry Silbert (SecondMarket)
>> Podcast: Effective Models for Sustainable Growth - Jennifer Morris (Conservation International)

Обратите внимание, что вы получили ошибку 500-диапазона.Это означает, что их сервер работает, но достаточно функционален, чтобы допустить проблему.Если вы получите ошибку в диапазоне 400, по какой-то причине вам будет отказано в доступе к контенту, поэтому я сомневаюсь, что проблема в аутентификации или чем-то еще на вашей стороне.

...