Se si vuole realizzare in Ruby un client HTTP/2, si può utilizzare http-2, disponibile su GitHub ed installabile tramite il comando:
gem install http-2
Il codice sorgente del client, che preleva una pagina d’esempio (https://10.211.55.17:3000/index.html) è disponibile sempre su GitHub, nonchè allegato a questa lezione.
Si può eseguire il client con il comando seguente:
python client.rb
L’apertura della connessione viene effettuata in due momenti. Nel primo, si definisce inizialmente il protocollo:
uri = URI('https://10.211.55.17:3000/index.html')
tcp = TCPSocket.new(uri.host, uri.port)
Inoltre si specifica anche il tipo di cifratura da usare per la connessione:
if uri.scheme == 'https'
ctx = OpenSSL::SSL::SSLContext.new
ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE # per certificati self-signed
sock = OpenSSL::SSL::SSLSocket.new(tcp, ctx)
sock.sync_close = true
sock.hostname = uri.hostname
sock.connect
else
sock = tcp
end
La connessione viene poi effettivamente inizializzata, e si comincia la trasmissione con le seguenti righe di codice:
conn = HTTP2::Client.new
stream = conn.new_stream