Ruby: Net :: HTTP.start проблема - PullRequest
1 голос
/ 27 июня 2011

У меня есть этот код (примерно):

parsed_url = URI.parse(url_string)
puts "before Net::HTTP.start block"
response = Net::HTTP.start(parsed_url.host, parsed_url.port) { |http|
  puts "inside Net::HTTP.start block"
  http.read_timeout = 10
  http.get(parsed_url.path)
}

Когда я выполняю код для URL-адреса с тайм-аутом в браузере, он никогда не попадает в блок. В любой другой ситуации это работает отлично. Есть ли какое-то поведение в методе запуска, которого я не вижу? Я предполагал, что соединение не будет открыто вообще до оператора http.get (parsed_url.path), поэтому я запутался, почему этот код больше не выполняется ...

спасибо заранее ...

Ответы [ 2 ]

1 голос
/ 29 октября 2012

Документация для Net :: HTTP класса читает

Открывает TCP-соединение и HTTP-сеанс.

Поэтому, когда вы вызываете Net::HTTP.start, соединение установлено, и если вы не можете получить доступ к данному URL, тогда Timeout::Error выбрасывается внутри метода start, и код внутри вашего блока действительно никогда не выполняется.

1 голос
/ 27 июня 2011

Net:HTTP.start вызывает do_start, что затем вызывает connect (оба они являются частными методами):

http://apidock.com/ruby/Net/HTTP/connect

Первые 3 строки

D "opening connection to #{conn_address()}..."
s = timeout(@open_timeout) { TCPSocket.open(conn_address(), conn_port()) }
D "opened"

и хотя я не могу найти документы для метода timeout, это может быть вашим виновником.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...