[ruby] Net:HTTP.get - skomplikowany url i read_timeout

Hej,

Mam kod, który działa:

url = "https://adres.hosta.xyz:8080/backend.php?action=GetBilling&request={\"from\":\"#{s}\",\"to\":\"#    {e}\",\"dl\":\"true\",\"success_calls\":\"true\",\"calltype\":\"outgoing\",\"id_customer\":\"#{@client_id}\"}&SESSID=#{@session_id}"
uri = URI(url)
response = Net::HTTP.get(uri)
json = JSON.parse(response)

Niestety adres.hosta.xyz potrafi odpowiadać masakrycznie długo i czasem dostaję po prostu timeouta.

Idąc za https://ruby-doc.org/stdlib-2.1.1/libdoc/net/http/rdoc/Net/HTTP.html

Doszedłem do:

Net::HTTP.start(uri.host, uri.port) do |http|
  request = Net::HTTP::Get.new uri
  http.read_timeout = 600
  response = http.request request
end

Niestety… to wywala mi błąd:

.rvm/rubies/ruby-2.3.3/lib/ruby/2.3.0/net/http/response.rb:42:in `read_status_line': wrong status line: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">" (Net::HTTPBadResponse)`

No i zdurniałem. Macie jakiś pomysł?

Ok, najprawdopodobniej nie wskakuje mi ssl. Ale nie wiem gdzie mam to zainicjować :confused: W bloku (http.use_ssl = true) zwraca mi:

use_ssl=': use_ssl value changed, but session already started (IOError)

Dobra… czytanie nie boli…

Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https')

niech zostanie dla potomnych :slight_smile:

Wszystko śmiga