Danbooru::Http: add default connection timeout.
* Add a three second connection timeout to all http requests. By default http.rb doesn't have any timeouts, so it can hang forever trying to connect if there are any network issues. * Return a fake 522 error in the event of a timeout so that callers don't have to deal with TimeoutError exceptions, instead they can treat timeouts as normal 5xx errors (which most callers already handle).
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
module Danbooru
|
module Danbooru
|
||||||
class Http
|
class Http
|
||||||
|
DEFAULT_TIMEOUT = 3
|
||||||
|
|
||||||
attr_writer :cache, :http
|
attr_writer :cache, :http
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
@@ -42,6 +44,9 @@ module Danbooru
|
|||||||
else
|
else
|
||||||
raw_request(method, url, **options)
|
raw_request(method, url, **options)
|
||||||
end
|
end
|
||||||
|
rescue HTTP::TimeoutError
|
||||||
|
# return a synthetic http error on connection timeouts
|
||||||
|
::HTTP::Response.new(status: 522, body: "", version: "1.1")
|
||||||
end
|
end
|
||||||
|
|
||||||
def cached_request(method, url, **options)
|
def cached_request(method, url, **options)
|
||||||
@@ -60,7 +65,7 @@ module Danbooru
|
|||||||
end
|
end
|
||||||
|
|
||||||
def http
|
def http
|
||||||
@http ||= ::HTTP.use(:auto_inflate).headers(Danbooru.config.http_headers).headers("Accept-Encoding" => "gzip")
|
@http ||= ::HTTP.timeout(DEFAULT_TIMEOUT).use(:auto_inflate).headers(Danbooru.config.http_headers).headers("Accept-Encoding" => "gzip")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user