class Translatomatic::HTTP::Client
HTTP
client
Constants
- MAX_REDIRECTS
- RETRIABLE
- RETRIABLE_CODES
Public Class Methods
new(options = {})
click to toggle source
# File lib/translatomatic/http/client.rb, line 7 def initialize(options = {}) @redirects = 0 @jar = ::HTTP::CookieJar.new @retry_delay = options[:retry_delay] || 2 end
Public Instance Methods
delete(url, options = {})
click to toggle source
get(url, query = nil, options = {})
click to toggle source
Send an HTTP
GET request @param url [String,URI] URL of the request @param query [Hash<String,String>] Optional query parameters @param options [Hash<Symbol,Object>] Request
options @return [Net::HTTP::Response]
# File lib/translatomatic/http/client.rb, line 18 def get(url, query = nil, options = {}) send_request_with_method(:get, url, options.merge(query: query)) end
head(url, options = {})
click to toggle source
post(url, body, options = {})
click to toggle source
Send an HTTP
POST request @param url [String,URI] URL of the request @param body [String,Hash] Body of the request @param options [Hash<Symbol,Object>] Request
options @return [Net::HTTP::Response]
# File lib/translatomatic/http/client.rb, line 27 def post(url, body, options = {}) send_request_with_method(:post, url, options.merge(body: body)) end
start(url, _options = {}) { |http| ... }
click to toggle source
Start an HTTP
request. Yields the http object. @param url [String,URI] URL of the request, requires host and port @return [Object] The result of the yielded block
# File lib/translatomatic/http/client.rb, line 50 def start(url, _options = {}) uri = url.respond_to?(:host) ? url : URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.scheme == 'https' # http.set_debug_output(Translatomatic.config.logger) if ENV['DEBUG'] result = http.start do @http = http yield http end @http = nil result end
Private Instance Methods
handle_response(response)
click to toggle source
# File lib/translatomatic/http/client.rb, line 114 def handle_response(response) log.debug("HTTP response: #{response.code} #{response.msg}") case response when Net::HTTPSuccess @redirects = 0 save_cookies(response) response when Net::HTTPRedirection @redirects += 1 raise 'Maximum redirects exceeded' if @redirects > MAX_REDIRECTS new_uri = redirect_uri(response) get(new_uri, nil) else # error @redirects = 0 raise Translatomatic::HTTP::Exception, response end end
redirect_uri(response)
click to toggle source
# File lib/translatomatic/http/client.rb, line 134 def redirect_uri(response) location = URI.parse(response['Location']) if location.relative? response.uri + response.location else location end end
send_request(req)
click to toggle source
# File lib/translatomatic/http/client.rb, line 94 def send_request(req) executor = HttpRetryExecutor.new(retry_delay: @retry_delay) executor.run { handle_response(send_request_http(req)) } end
send_request_http(req)
click to toggle source
# File lib/translatomatic/http/client.rb, line 99 def send_request_http(req) if @http log.debug("HTTP request: #{req.http_request.uri}") @http.request(req.http_request) else start(req.uri) { |_http| send_request_http(req) } end end
send_request_with_method(method, url, options = {})
click to toggle source
# File lib/translatomatic/http/client.rb, line 87 def send_request_with_method(method, url, options = {}) cookies = ::HTTP::Cookie.cookie_value(@jar.cookies(url)) options = options.merge(cookies: cookies) if cookies.present? request = Request.new(method, url, options) send_request(request) end