Python - Richieste 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. IN python usiamo il modulo delle richieste per creare le richieste http. È un modulo molto potente che può gestire molti aspetti della comunicazione http oltre ai semplici dati di richiesta e risposta. Può gestire autenticazione, compressione / decompressione, richieste in blocchi, ecc.

Un client HTTP invia una richiesta HTTP a un server sotto forma di un messaggio di richiesta che include il seguente formato:

  • Una linea di richiesta
  • Zero o più campi di intestazione (Generale | Richiesta | Entità) seguiti da CRLF
  • Una riga vuota (cioè una riga con nulla che precede il CRLF) che indica la fine dei campi di intestazione
  • Facoltativamente un corpo del messaggio

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

Request-Line

La riga della richiesta inizia con un token del metodo, seguita dall'URI della richiesta e dalla versione del protocollo e termina con CRLF. Gli elementi sono separati da spazi SP caratteri.

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

Discutiamo ciascuna delle parti menzionate nella Request-Line.

Metodo di richiesta

La richiesta method indica il metodo da eseguire sulla risorsa identificata dal dato Request-URI. Il metodo fa distinzione tra maiuscole e minuscole e dovrebbe essere sempre menzionato in maiuscolo. La tabella seguente elenca tutti i metodi supportati in HTTP / 1.1.

SN Metodo e descrizione
1 GET

Il metodo GET viene utilizzato per recuperare le informazioni da un determinato server utilizzando un determinato URI. Le richieste che utilizzano GET dovrebbero solo recuperare i dati e non dovrebbero avere altri effetti sui dati.

2 HEAD

Uguale a GET, ma trasferisce solo la riga di stato e la sezione di intestazione.

3 POST

Una richiesta POST viene utilizzata per inviare dati al server, ad esempio, informazioni sul cliente, caricamento di file, ecc. Utilizzando moduli HTML.

4 PUT

Sostituisce tutte le rappresentazioni correnti della risorsa di destinazione con il contenuto caricato.

5 DELETE

Rimuove tutte le rappresentazioni correnti della risorsa di destinazione fornita dall'URI.

6 CONNECT

Stabilisce un tunnel verso il server identificato da un dato URI.

7 OPTIONS

Descrivi le opzioni di comunicazione per la risorsa di destinazione.

8 TRACE

Esegue un test di loopback dei messaggi insieme al percorso della risorsa di destinazione.

Request-URI

Il Request-URI è un Uniform Resource Identifier e identifica la risorsa su cui applicare la richiesta. Di seguito sono riportati i moduli più comunemente utilizzati per specificare un URI:

Request-URI = "*" | absoluteURI | abs_path | authority
 
SN Metodo e descrizione
1 L'asterisco *viene utilizzato quando una richiesta HTTP non si applica a una particolare risorsa, ma al server stesso ed è consentito solo quando il metodo utilizzato non si applica necessariamente a una risorsa. Per esempio:

OPTIONS * HTTP/1.1

2 Il absoluteURIviene utilizzato quando viene effettuata una richiesta HTTP a un proxy. Al proxy viene richiesto di inoltrare la richiesta o il servizio da una cache valida e restituire la risposta. Per esempio:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

3 La forma più comune di Request-URI è quella utilizzata per identificare una risorsa su un server o gateway di origine. Ad esempio, un client che desidera recuperare una risorsa direttamente dal server di origine creerebbe una connessione TCP alla porta 80 dell'host "www.w3.org" e invierebbe le seguenti righe:

GET /pub/WWW/TheProject.html HTTP/1.1

Host: www.w3.org

Notare che il percorso assoluto non può essere vuoto; se nessuno è presente nell'URI originale, DEVE essere dato come "/" (la radice del server).

Utilizzo delle richieste Python

Useremo le richieste del modulo per conoscere la richiesta http.

pip install requests

Nell'esempio seguente vediamo un caso di semplice richiesta GET annd stampare il risultato della risposta. Scegliamo di stampare solo i primi 300 caratteri.

# How to make http request
import requests as req
r = req.get('http://www.tutorialspoint.com/python/')
print(r.text)[0:300]

Quando eseguiamo il programma sopra, otteniamo il seguente output:

<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->	<html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="utf-8">
<title>Python Tutorial</title>
<meta name="description" content="Python Tutorial