Что не так в асинхронном коде, EventMachine?

require 'eventmachine'
require 'em-http-request'

urls = [
  'http://example.com/',
  'https://www.cloudflare.com/robots.txt',
  'https://rubygems.org/gems/em-http-request/versions.atom',
  'https://www.cloudflare.com/robots.txt2', # 404 not found
  'http://twitter.com/robots.txt',
  # 'http://localhost/robots.txt',
]

def url_handler(url)
  http = EventMachine::HttpRequest.new(url).get

  http.errback {
  	puts "Oops #{url}"
  	puts '-'*20
  	EventMachine.stop
  }
  http.callback {
    puts "#{http.response_header.status} #{url}"
    # p http.response_header
    p http.response[0,50]
    puts '-'*20
    EventMachine.stop
  }
end

EventMachine.run do
  urls.each {|url| url_handler(url) }
end

Почему вызывается errback?
Вывод №1
200 example.com
"\n\n\n Example D"
--------------------
Oops https://www.cloudflare.com/robots.txt
--------------------
Oops https://rubygems.org/gems/em-http-request/versions.atom
--------------------
Oops https://www.cloudflare.com/robots.txt2
--------------------
Oops twitter.com/robots.txt
Вывод №2
200 twitter.com/robots.txt
"#Google Search Engine Robot\nUser-agent: Googlebot\n"
--------------------
Oops example.com
--------------------
Oops https://www.cloudflare.com/robots.txt
--------------------
Oops https://rubygems.org/gems/em-http-request/versions.atom
--------------------
Oops https://www.cloudflare.com/robots.txt2
--------------------
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы