Net::HTTP timeout


#1

Hi all,

Is there a way to set the timout limit that affects Net::HTTP ?
This is what I’m trying to do:

body = Net::HTTP.get(URI.parse(url))

and I do know that the target script (url) takes a long time to do
its processing and to return the data to the calling script, so
that’s why I want get() to ignore any timeouts (or to set them high
enough).

This is what I get right now:

/usr/lib/ruby/1.8/net/protocol.rb:197:in rbuf_fill': socket read timeout (60 sec) (Timeout::Error) from /usr/lib/ruby/1.8/net/protocol.rb:160:inreaduntil’
from /usr/lib/ruby/1.8/net/protocol.rb:171:in readline' from /usr/lib/ruby/1.8/net/http.rb:1760:inread_chunked’
from /usr/lib/ruby/1.8/net/http.rb:1739:in read_body_0' from /usr/lib/ruby/1.8/net/http.rb:1705:inread_body’
from /usr/lib/ruby/1.8/net/http.rb:1730:in body' from /usr/lib/ruby/1.8/net/http.rb:1668:inreading_body’
from /usr/lib/ruby/1.8/net/http.rb:835:in request' from /usr/lib/ruby/1.8/net/http.rb:297:inget_by_uri’
from /usr/lib/ruby/1.8/net/http.rb:296:in start' from /usr/lib/ruby/1.8/net/http.rb:296:inget_by_uri’
from /usr/lib/ruby/1.8/net/http.rb:282:in get_response' from /usr/lib/ruby/1.8/net/http.rb:263:inget’
from jobqueue.rb:41

Any tips/pointers are appreciated, thank you,
Alex

P.S. I did read http://www.ruby-doc.org/stdlib/ -> net/http but
haven’t seen any method/parameter that might help me on this…


#2

You could search the source for ‘60’. And/or ‘Timeout::Error’


#3

sender: “Bob G.” date: “Wed, Mar 22, 2006 at 09:04:17PM +0900” <<<EOQ
You could search the source for ‘60’. And/or ‘Timeout::Error’
Well, I was hoping for a more ruby-like ideea .set_timeout() or
something
but this will do just fine, thanks for the ideea :slight_smile:

Alex


#4

On 3/22/06, Alexandru E. Ungur removed_email_address@domain.invalid wrote:

body = Net::HTTP.get(URI.parse(url))

and I do know that the target script (url) takes a long time to do
its processing and to return the data to the calling script, so
that’s why I want get() to ignore any timeouts (or to set them high
enough).

Have you tried the following?
(from “Example 3: More generic GET+print” in the docs)

require ‘net/http’
require ‘uri’

url = URI.parse(‘http://www.example.com/index.html’)

res = Net::HTTP.start(url.host, url.port) {|http|
http.read_timeout = 600
http.get(’/index.html’)
}

body = res.body

  • Dimitri

#5

Thank you all for your help!

In the end .read_timeout did the trick just fine :slight_smile:

Thanks,
Alex


#6

Use Time Out block.

require ‘timeout’



begin
timeout(60) do
resp, body=h.get(’/index.html’)
puts body
end
rescue TimeoutError
puts “Timed Out”
end