OpenURI — внутренняя ошибка сервера 500 в канале XML

Я пытаюсь прочитать Стэнфордский экокорнер XML:

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

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

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


person alex    schedule 05.05.2011    source источник
comment
Вы уверены, что не просто столкнулись с временной проблемой сервера? Я могу lynx -dump -source http://ecorner.stanford.edu/RecentlyAdded.xml без проблем.   -  person mu is too short    schedule 05.05.2011
comment
@mu слишком короткий, я думаю, что это то, что. Диапазон 500 - это проблемы на стороне сервера. Ошибки авторизации будут ошибкой диапазона 400.   -  person the Tin Man    schedule 05.05.2011


Ответы (2)


Если вы не вошли в систему, вы должны получить код ответа 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>
person Michael Kohl    schedule 05.05.2011
comment
Я попробовал без и получил ту же ошибку 500, что и OP, и добавление User-Agent исправило ее. Об аналогичной проблеме также сообщалось на ruby-talk для другого сайта, откуда я получил исправление. - person Michael Kohl; 05.05.2011
comment
Ну, 500 означает, что их сервер испортился. Если они не хотели, чтобы вы видели контент из-за отсутствующей строки User-Agent, они должны были отказать в доступе с другим кодом, возможно, с ответом в диапазоне 400. Я подозреваю, что у них неправильно сконфигурированный или сломанный хост, а User-Agent — отвлекающий маневр. - person the Tin Man; 05.05.2011
comment
@The Tin Man: Или, возможно, их код что-то делает с пользовательским агентом (например, искажает данные, чтобы обойти ошибки), но они не учли случай no User-Agent. Таким образом, lynx -dump -source будет работать, потому что он отправляет пользовательский агент, но запрос без пользовательского агента приводит к тому, что их сервер расстраивается, падает и загорается. - person mu is too short; 05.05.2011
comment
@mu слишком короткий, ну, это было бы хорошей гипотезой, за исключением того, что я уже обнаружил, что это работает без определения пользовательского агента. Это мой ответ на этот вопрос. - person the Tin Man; 06.05.2011
comment
Отлично работает с User-Agent. Спасибо! - person alex; 06.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, они по какой-то причине откажут вам в доступе к контенту, поэтому я сомневаюсь, что проблема связана с аутентификацией или чем-то еще на вашей стороне.

person the Tin Man    schedule 05.05.2011