HTTP-запрос EventMachine не может подключиться за прокси-сервером через HTTPS

Я работаю с em-http, но не могу получить соединение HTTPS (SSL) за прокси. Вот мой код.

require 'eventmachine'
require 'em-http'

url = "https://twitter.com/"
opts = {
  :proxy => { :host => 'my.proxy', :port => 8080 }
}

EventMachine.run do
  http = EventMachine::HttpRequest.new(url, opts).get
  http.callback {
    puts http.response
    EventMachine.stop
  }
end

Этот код работает без ошибок, но ничего не делает и не выходит из основного цикла eventmachine.

Когда я пробую это в условиях, подобных приведенным ниже, мое приложение может подключиться к цели.

  • внешний прокси/через HTTPS
  • за прокси/через HTTP

Я также могу получить ответ, используя curl за прокси.

curl "https://twitter.com/"

Что не так с моим кодом?


person daixque    schedule 23.02.2012    source источник
comment
Вы можете добавить тайм-аут в запрос на получение, чтобы, по крайней мере, приложение не зависало навсегда. Измените строку на http = EventMachine::HttpRequest.new(url, opts).get, :timeout =› 15   -  person Dan Garland    schedule 10.05.2012


Ответы (3)


У меня была та же проблема сегодня, я не смог заставить проксированные ssl-запросы работать с моим http-прокси, но я смог заставить его работать с прокси-сервером socks5:

:proxy => { :host => 'my.proxy', :port => 8080, :type => :socks5 }
person pguardiario    schedule 25.08.2012

Изменить вызов:

http = EventMachine::HttpRequest.new(url).get opts
person David Neubauer    schedule 20.10.2012
comment
Было бы полезно, если бы вы могли объяснить немного больше, почему это работает. - person Johnny Graber; 20.10.2012

Укажите errback. Затем ваш код выйдет из цикла обработки событий, а также распечатает любые проблемы, которые могут возникнуть у прокси-запроса:

http.errback {
  p http.response_header.status
  p http.response_header
  p http.response

  EventMachine.stop
}
person Walking Wiki    schedule 25.03.2012