Sinatra выдает сброс соединения из-за ошибки однорангового узла при запросе RSS-канала Apple UK

Это код, который я использую для получения XML-данных из RSS-канала Apple Top 10 UK:

xml = Net::HTTP.get_response(URI.parse('http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml')).body

Синатра возвращает Errno::ECONNRESET at / - Connection reset by peer. URL-адрес RSS, который я использовал для этого, был создан с помощью генератора Apple RSS, который здесь. Ошибка возникает с RSS-каналами других стран, но НЕ возникает с каналом по умолчанию (США), найденным здесь . Обратная трассировка приведена ниже:

/usr/lib/ruby/1.9.1/net/protocol.rb in read_nonblock
        @rbuf << @io.read_nonblock(BUFSIZE)
/usr/lib/ruby/1.9.1/net/protocol.rb in rbuf_fill
        @rbuf << @io.read_nonblock(BUFSIZE)
/usr/lib/ruby/1.9.1/net/protocol.rb in readuntil
          rbuf_fill
/usr/lib/ruby/1.9.1/net/protocol.rb in readline
      readuntil("\n").chop
/usr/lib/ruby/1.9.1/net/http.rb in read_status_line
        str = sock.readline
/usr/lib/ruby/1.9.1/net/http.rb in read_new
        httpv, code, msg = read_status_line(sock)
/usr/lib/ruby/1.9.1/net/http.rb in block in transport_request
          res = HTTPResponse.read_new(@socket)
/usr/lib/ruby/1.9.1/net/http.rb in catch
      res = catch(:response) {
/usr/lib/ruby/1.9.1/net/http.rb in transport_request
      res = catch(:response) {
/usr/lib/ruby/1.9.1/net/http.rb in request
      res = transport_request(req, &block)
/usr/lib/ruby/1.9.1/net/http.rb in request_get
      request(Get.new(path, initheader), &block)
/usr/lib/ruby/1.9.1/net/http.rb in block in get_response
          return http.request_get(uri.request_uri, &block)
/usr/lib/ruby/1.9.1/net/http.rb in start
          return yield(self)
/usr/lib/ruby/1.9.1/net/http.rb in get_response
        new(uri.hostname, uri.port).start {|http|
/home/sinatra/little.rb in block in <top (required)>
    xml = Net::HTTP.get_response(URI.parse('https://itunes.apple.com/gb/rss/topsongs/limit=5/xml')).body
/usr/lib/ruby/1.9.1/webrick/httpserver.rb in service
      si.service(req, res)
/usr/lib/ruby/1.9.1/webrick/httpserver.rb in run
          server.service(req, res)
/usr/lib/ruby/1.9.1/webrick/server.rb in block in start_thread
          block ? block.call(sock) : run(sock)

person Amja    schedule 02.01.2013    source источник


Ответы (1)


Решил это сам. Оказалось, что я использовал неправильную команду Net: HTTP. Должно было быть Net::HTTP.get('itunes.apple.com','/gb/rss/topsongs/limit=10/xml')

person Amja    schedule 08.01.2013