Simple get
Простая функция для отправки http get.
def get(request)
request = CGI::escape(request)
uri = URI("http://#{$server}/#{request}")
Net::HTTP.get(uri)
end
Get with header
Пример запроса с header. Обращаю внимание, что в старой версии ruby 1.9.3 обязательно нужно к uri применить метод .request_uri, в новых не обязательно.
uri = URI("http://test-api.net/login=#{login}") req = Net::HTTP::Get.new(uri.request_uri) req['Auth-Token'] = "my_token" res = Net::HTTP.start(uri.hostname, uri.port) {|http| http.request(req).body }
Get with timeout
Если при http_get выдает ошибку Timeout rescue in rbuf_fill – пробуем увеличить таймаут. Так же в каких-то кейсах имеет смысл выставить max_retries в 2-3 (по умолчанию 1). Код сложнее первого и не так очевиден.
net/protocol.rb:141:in read_nonblock net/protocol.rb:141:in rbuf_fill net/protocol.rb:122:in readuntil net/protocol.rb:132:in readline net/http.rb:2563:in read_status_line net/http.rb:2552:in read_new net/http.rb:1320:in block in transport_request net/http.rb:1317:in catch net/http.rb:1317:in transport_request net/http.rb:1294:in request def get_new(request)
request = CGI::escape(request)
uri = URI("http://#{$server}/#{request}")
request = Net::HTTP::Get.new(uri.path)
res = Net::HTTP.start(uri.hostname, uri.port, :read_timeout => 500) do |http|
http.request(request)
end
res.body
end