Заметил, что Ruby RestClient точно не следует заданному параметру тайм-аута, однако работает, удваивая текущую настройку тайм-аута.
Кто-нибудь заметил то же самое?Прикрепленный пример тестового кода ниже.
Поскольку httpbin.org имеет максимальную задержку 10, нам нужно использовать небольшие тайм-ауты:
def test_timeout(delay)
start = Time.now.to_i
RestClient::Request.execute(url: "http://httpbin.org/delay/10",
method: 'GET',
timeout: delay)
return 0
rescue RestClient::Exceptions::ReadTimeout => exception
endtime = Time.now.to_i
return endtime - start
end
pry(main)> test_timeout 1
RestClient.get "http://httpbin.org/delay/10", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate"
=> 3
pry(main)> test_timeout 5
RestClient.get "http://httpbin.org/delay/10", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate"
=> 10
Используя Ruby RestClient 2.0.2, а также протестирован с 2.1.0.rc1
Также протестирован с параметрами read_timeout и open_timeout, которые имели одинаковые значения
def test_timeout(delay)
start = Time.now.to_i
RestClient::Request.execute(url: "http://httpbin.org/delay/10",
method: 'GET',
open_timeout: 1,
read_timeout: delay)
return 0
rescue RestClient::Exceptions::ReadTimeout => exception
endtime = Time.now.to_i
return endtime - start
end
pry(main)> test_timeout 2
RestClient.get "http://httpbin.org/delay/10", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate"
=> 4
pry(main)> test_timeout 3
RestClient.get "http://httpbin.org/delay/10", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate"
=> 6