Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 6 di 32
  • livello principiante
Indice lezioni

Protocollo HTTP

Come generare e manipolare flussi HTTP
Come generare e manipolare flussi HTTP
Link copiato negli appunti

Iniziamo con Net::HTTP che permette di accedere alle pagine web via HTTP. Questa libreria offre diverse modalità di accesso che si adattano alle diverse esigenze, ad esempio se si ha la necessità di visualizzare solo il contenuto della pagina basta utilizzare il metodo get_print che prende come argomenti l'URI del sito e opzionalmente il percorso e la porta:

>> require 'net/http'
>> Net::HTTP.get_print 'www.google.it', '/index.html'
<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><title>Google</title><style>body,td,a,p,.h{font-family:arial,sans-serif}.h{font-size:20px}.h{color:#3366cc}.q{color:#00c}.ts
...

In alternativa è possibile usare il metodo URI.parse per estrarre gli argomenti da un URL:

Net::HTTP.get_print URI.parse('http://www.google.it/index.html')

Se si deve accedere ad altre informazioni oltre al contenuto è disponibile il metodo start che apre una sessione HTTP e passa un oggetto HTTP al blocco associato. Anche start prende come argomenti l'host e opzionalmente la porta, ad esempio per visualizzare ancora il contenuto della pagina:

require 'net/http'

pagina = Net::HTTP.start('www.google.it') do |http|
    http.get('/index.html')
end

puts pagina.body

In questo caso oltre al corpo della pagina è possibile accedere ad un gran numero di informazioni riguardanti la sessione HTML aperta, ad esempio:

>> pagina.code
=> "200"
>> pagina.message
=> "OK"
>> pagina.content_type
=> "text/html"
>> pagina.http_version
=> "1.1"

Per l'elenco completo possiamo utilizzare il comando page.methods.

Alcune informazioni sono invece disponibili sotto forma di un hash con le seguenti chiavi: cache-control, date, content-type, server, set-cookie, transfer-encoding.

Di grande interesse sono i metodi di Net::HTTPHeader che permettono la gestione degli header attraverso utili metodi dal nome autoesplicativo come each_capitalized, each_capitalized_name, each_header, each_key, each_name, each_value, proxy_basic_auth, type_params, urlencode, basic_auth, basic_encode e vari altri.

Ancora un'altra alternativa è rappresentata da Net::HTTP::get_response che prende gli stessi argomenti ma restituisce un oggetto di tipo Net::HTTPResponse

require 'net/http'

pagina = Net::HTTP.get_response('www.google.it', '/index.html')
puts pagina.body

Tra i metodi di HTTPResponse troviamo body_permitted?, each_response_header, read_status_line, response_class, body, entity, inspect, procdest, read_body, read_body_0 e vari altri utili strumenti.

Per eseguire delle richieste HTTPS basta impostare opportunamente alcuni parametri:

require 'net/http'
require 'net/https'

uri = URI.parse("https://www.trustedcomputinggroup.org/home")

richiesta = Net::HTTP.new(uri.host, uri.port)
richiesta.use_ssl = true
richiesta.verify_mode = OpenSSL::SSL::VERIFY_NONE

pagina = richiesta.get("/")
puts pagina.body

Per utilizzare HTTPS basta impostare a "true" il flag use_ssl, è inoltre possibile impostare alcune opzioni relative a SSL, ad esempio scegliendo OpenSSL::SSL::VERIFY_NONE come verify_mode decidiamo di non fare nessuna verifica.

Ti consigliamo anche