HTTP JSON GET with connect and read timeouts
Crystal
require "http/client"
require "json"
def get_json(url : String, timeout : Time::Span = 5.seconds) : JSON::Any
uri = URI.parse(url)
client = HTTP::Client.new(uri)
client.connect_timeout = timeout
client.read_timeout = timeout
begin
response = client.get(uri.full_path)
raise "GET #{url} failed: #{response.status_code}" unless response.success?
JSON.parse(response.body)
ensure
client.close
end
end
data = get_json("http://example.com/api.json")
puts data["ok"]?