# How to change the Timeout::Error threshold for open\_uri

**URL:** <https://www.ruby-forum.com/t/how-to-change-the-timeout-error-threshold-for-open-uri/132506>\
**Category:** Ruby\
**Created:** [March 20, 2008, 9:18pm UTC](https://www.ruby-forum.com/t/how-to-change-the-timeout-error-threshold-for-open-uri/132506 "2008-03-20T21:18:50Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![keith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f05b48/32.png) [@keith](https://www.ruby-forum.com/u/keith)\
**Post date:** [March 20, 2008, 9:18pm UTC](https://www.ruby-forum.com/t/how-to-change-the-timeout-error-threshold-for-open-uri/132506/1 "2008-03-20T21:18:50Z")

</div>

When opening a particularly slow loading URL I am getting the following  
error:

Loading production environment (Rails 2.0.2)

> > require ‘open-uri’  
> > =\> [“OpenURI”]

?\> open(‘[WWTDD - Latest Celebrity Gossip and Scandal News](http://www.wwtdd.com/?start=2331)’) { |f|  
?\> puts " Opened successfully with charset: " + f.charset

> > }  
> > /usr/lib64/ruby/1.8/timeout.rb:54:in `rbuf_fill': execution expired (Timeout::Error) from /usr/lib64/ruby/1.8/timeout.rb:56:in `timeout’  
> > from /usr/lib64/ruby/1.8/timeout.rb:76:in `timeout' from /usr/lib64/ruby/1.8/net/protocol.rb:132:in `rbuf\_fill’  
> > from /usr/lib64/ruby/1.8/net/protocol.rb:116:in `readuntil' from /usr/lib64/ruby/1.8/net/protocol.rb:126:in `readline’  
> > from /usr/lib64/ruby/1.8/net/http.rb:2029:in `read_status_line' from /usr/lib64/ruby/1.8/net/http.rb:2018:in `read\_new’  
> > from /usr/lib64/ruby/1.8/net/http.rb:1059:in `request' ... 9 levels... from /usr/lib64/ruby/1.8/open-uri.rb:30:in `open’  
> > from (irb):33:in `irb_binding' from /usr/lib64/ruby/1.8/irb/workspace.rb:52:in `irb\_binding’  
> > from /usr/lib64/ruby/1.8/irb/workspace.rb:52

Does anyone know how to fix this? I want it to wait longer for the web  
server to respond.

---

<div class="post-metadata">

**Author:** ![keith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f05b48/32.png) [@keith](https://www.ruby-forum.com/u/keith)\
**Post date:** [March 21, 2008, 2:28am UTC](https://www.ruby-forum.com/t/how-to-change-the-timeout-error-threshold-for-open-uri/132506/2 "2008-03-21T02:28:26Z")

</div>

Shameless bump. Shoud I be posting on another forum?

---

<div class="post-metadata">

**Author:** ![keith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f05b48/32.png) [@keith](https://www.ruby-forum.com/u/keith)\
**Post date:** [March 21, 2008, 5:54am UTC](https://www.ruby-forum.com/t/how-to-change-the-timeout-error-threshold-for-open-uri/132506/3 "2008-03-21T05:54:30Z")

</div>

> Does anyone know how to fix this? I want it to wait longer for  
> the web server to respond.

Look in the docs/code and you shall find…

OpenURI wraps net/http and net/https

Looking in net/http finds these accessor methods:

```
# Seconds to wait until connection is opened.
# If the HTTP object cannot open a connection in this many seconds,
# it raises a TimeoutError exception.
attr_accessor :open_timeout

# Seconds to wait until reading one block (by one read(2) call).
# If the HTTP object cannot open a connection in this many seconds,
# it raises a TimeoutError exception.
attr_reader :read_timeout

```

Maybe that would help.

Mikel

---

<div class="post-metadata">

**Author:** ![keith](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f05b48/32.png) [@keith](https://www.ruby-forum.com/u/keith)\
**Post date:** [May 4, 2009, 2:01am UTC](https://www.ruby-forum.com/t/how-to-change-the-timeout-error-threshold-for-open-uri/132506/4 "2009-05-04T02:01:08Z")

</div>

Keith C. wrote:

> When opening a particularly slow loading URL I am getting the following  
> error:
> 
> Loading production environment (Rails 2.0.2)
> 
> > > require ‘open-uri’  
> > > =\> [“OpenURI”]
> 
> ?\> open(‘[WWTDD - Latest Celebrity Gossip and Scandal News](http://www.wwtdd.com/?start=2331)’) { |f|  
> ?\> puts " Opened successfully with charset: " + f.charset
> 
> > > }  
> > > /usr/lib64/ruby/1.8/timeout.rb:54:in `rbuf_fill': execution expired (Timeout::Error) from /usr/lib64/ruby/1.8/timeout.rb:56:in `timeout’  
> > > from /usr/lib64/ruby/1.8/timeout.rb:76:in `timeout' from /usr/lib64/ruby/1.8/net/protocol.rb:132:in `rbuf\_fill’  
> > > from /usr/lib64/ruby/1.8/net/protocol.rb:116:in `readuntil' from /usr/lib64/ruby/1.8/net/protocol.rb:126:in `readline’  
> > > from /usr/lib64/ruby/1.8/net/http.rb:2029:in `read_status_line' from /usr/lib64/ruby/1.8/net/http.rb:2018:in `read\_new’  
> > > from /usr/lib64/ruby/1.8/net/http.rb:1059:in `request' ... 9 levels... from /usr/lib64/ruby/1.8/open-uri.rb:30:in `open’  
> > > from (irb):33:in `irb_binding' from /usr/lib64/ruby/1.8/irb/workspace.rb:52:in `irb\_binding’  
> > > from /usr/lib64/ruby/1.8/irb/workspace.rb:52
> 
> Does anyone know how to fix this? I want it to wait longer for the web  
> server to respond.

require ‘net/http’

# Lengthen timeout in Net::HTTP

module Net  
class HTTP  
alias old\_initialize initialize

```
    def initialize(*args)
        old_initialize(*args)
        @read_timeout = 3*60 # 3 minutes
    end
end

```

end
