Python - Risposta HTTP

Il protocollo http o Hyper Text Transfer funziona sul modello client server. Di solito il browser web è il client e il computer che ospita il sito web è il server. Dopo aver ricevuto una richiesta dal client, il server genera una risposta e la invia al client in un determinato formato.

Dopo aver ricevuto e interpretato un messaggio di richiesta, un server risponde con un messaggio di risposta HTTP:


     
  • A Status-line
  • Zero or more header (General|Response|Entity) fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

Le sezioni seguenti spiegano ciascuna delle entità utilizzate in un messaggio di risposta HTTP.

Riga di stato del messaggio

Una riga di stato è costituita dalla versione del protocollo seguita da un codice di stato numerico e dalla frase testuale associata. Gli elementi sono separati da spazi SP caratteri.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

Versione HTTP

Un server che supporta HTTP versione 1.1 restituirà le seguenti informazioni sulla versione:

HTTP-Version = HTTP/1.1

Codice di stato

L'elemento Status-Code è un numero intero di 3 cifre dove la prima cifra del Status-Code definisce la classe di risposta e le ultime due cifre non hanno alcun ruolo di categorizzazione. Sono disponibili 5 valori per la prima cifra:

SN Codice e descrizione
1 1xx: Informational

Significa che la richiesta è stata ricevuta e il processo sta continuando.

2 2xx: Success

Significa che l'azione è stata ricevuta, compresa e accettata con successo.

3 3xx: Redirection

Significa che è necessario intraprendere ulteriori azioni per completare la richiesta.

4 4xx: Client Error

Significa che la richiesta contiene una sintassi errata o non può essere soddisfatta.

5 5xx: Server Error

Significa che il server non è riuscito a soddisfare una richiesta apparentemente valida.

I codici di stato HTTP sono estensibili e le applicazioni HTTP non sono necessarie per comprendere il significato di tutti i codici di stato registrati.

Utilizzo delle richieste Python

Nel seguente programma python usiamo il modulo urllib3 per fare una richiesta http GET e ricevere la risposta contenente i dati. Fornisce inoltre il codice di risposta che è anche gestito dalle funzioni nel modulo. L'oggetto PoolManager gestisce tutti i dettagli del pool di connessioni e gestisce anche la thread safety.

import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'http://tutorialspoint.com/robots.txt')
print resp.data
# get the status of the response
print resp.status

Quando eseguiamo il programma sopra, otteniamo il seguente output:

User-agent: *
Disallow: /tmp
Disallow: /logs
Disallow: /rate/*
Disallow: /cgi-bin/*
Disallow: /videotutorials/video_course_view.php?*
Disallow: /videotutorials/course_view.php?*
Disallow: /videos/*
Disallow: /*/*_question_bank/*
Disallow: //*/*/*/*/src/*
200