Я пытаюсь получить несколько URL-адресов асинхронно, и только 1 URL успешно завершен.
Пожалуйста, помогите выяснить причину из кода ниже и не понять, почему вместо обратного вызова обрабатывается errback ? Не могли бы вы указать на вопрос?
require 'eventmachine'
require 'em-http-request'
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,60]
puts '-'*20
EventMachine.stop
}
end
urls = [
'https://www.cloudflare.com/robots.txt2', # 404, not found
'http://example.com/',
'https://www.cloudflare.com/robots.txt',
'https://rubygems.org/gems/em-http-request/versions.atom',
'http://twitter.com/robots.txt',
# 'http://localhost/robots.txt',
]
EventMachine.run do
urls.each {|url| url_handler(url) }
end
Пример вывода:
200 http://example.com/
"<!doctype html>\n<html>\n<head>\n <title>Example Domain</tit"
--------------------
Oops https://www.cloudflare.com/robots.txt2
--------------------
Oops https://www.cloudflare.com/robots.txt
--------------------
Oops https://rubygems.org/gems/em-http-request/versions.atom
--------------------
Oops http://twitter.com/robots.txt
--------------------