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