6.1 Perché hai bisogno di un proxy?
Adesso è il momento in cui ogni paese ha il proprio internet. Ora non sono solo gli utenti singoli a essere bloccati, ma interi siti web, domini, applicazioni e persino paesi. Non è bello. Ma se sei un programmatore, non è un problema — internet è pieno di proxy server...
Un proxy server (o semplicemente un proxy) è un server intermedio che funge da mediatore tra il client (ad esempio, il tuo computer) e il server a cui stai cercando di accedere. Il proxy server riceve richieste dal client, le inoltra al server di destinazione, ottiene le risposte e le invia di nuovo al client.
Ogni grande prodotto ha almeno diversi proxy server che svolgono varie funzioni utili. Ad esempio, come:
- Anonimizzazione: Un proxy server può nascondere il vero indirizzo IP del client, fornendo accesso anonimo alle risorse internet. L'indirizzo IP è un identificatore unico per il dispositivo nella rete, e nasconderlo aiuta a mantenere la privacy dell'utente.
- Caching: Un proxy server può memorizzare nella cache le risorse richieste frequentemente, accelerando l'accesso a esse e riducendo il carico sulle risorse di rete. Ad esempio, se molti utenti richiedono la stessa pagina web, il proxy server può memorizzarne una copia e fornirla direttamente senza contattare ogni volta il server originale.
- Filtraggio dei contenuti: Un proxy server può bloccare l'accesso a determinati siti web o tipi di contenuti, garantendo il controllo e la sicurezza.
- Aggiramento delle restrizioni di accesso: Un proxy server può aiutare ad aggirare le restrizioni regionali di accesso ai contenuti, fornendo accesso a risorse bloccate in determinate aree geografiche.
- Registrazione e monitoraggio: Un proxy server può tenere un registro di tutte le richieste e risposte, permettendo di tracciare e analizzare il traffico di rete.
Principio di funzionamento di un proxy server
- Il client invia una richiesta: Il dispositivo client (ad esempio, computer o smartphone) invia una richiesta al proxy server.
- Il proxy server elabora la richiesta: Il proxy server riceve la richiesta, può modificarla (ad esempio, aggiungere o rimuovere intestazioni) e la inoltra al server di destinazione.
- Il server di destinazione risponde: Il server di destinazione elabora la richiesta e invia la risposta al proxy server.
- Il proxy server restituisce la risposta al client: Il proxy server riceve la risposta dal server di destinazione, può memorizzarla nella cache per un uso successivo e la inoltra al client.
Vantaggi dell'utilizzo di un proxy server
- Miglioramento della sicurezza: Un proxy server può nascondere le reti interne al mondo esterno, riducendo il rischio di attacchi.
- Accelerazione dell'accesso: Il caching delle risorse richieste frequentemente riduce il tempo di accesso a esse.
- Controllo dell'accesso: Un proxy server può limitare l'accesso a determinati siti o tipi di contenuto, garantendo il controllo sull'uso della rete.
- Riduzione del carico sulla rete: Grazie al caching e al filtraggio del traffico, i proxy server possono ridurre il volume complessivo dei dati trasmessi e il carico sulla rete.
Molti programmi server per motivi di sicurezza non hanno accesso diretto a internet. Invece, si connettono attraverso un proxy, che ha già una lista di siti e risorse consentiti. Quindi, anche i tuoi programmi dovrebbero essere in grado di funzionare con i proxy.
Nonostante tutti i vantaggi, l'utilizzo di proxy server può avere anche degli svantaggi. Ad esempio, potrebbe portare a una diminuzione della velocità di connessione, poiché le richieste passano attraverso un ulteriore passaggio. Inoltre, alcuni siti potrebbero bloccare l'accesso dai proxy server conosciuti.
6.2 Proxy e il modulo requests
La libreria requests
supporta l'uso di proxy server attraverso
il parametro proxies
.
HTTP (Hypertext Transfer Protocol) e HTTPS (HTTP Secure) sono protocolli di trasferimento dati su internet. HTTPS è la versione sicura di HTTP. Possono essere utilizzati diversi proxy server per essi, poiché potrebbero richiedere un'elaborazione diversa a causa delle caratteristiche di crittografia di HTTPS.
Esempio di utilizzo di un proxy HTTP
Di solito si passa non un singolo proxy, ma un intero elenco. Questo è molto comodo se alcuni proxy vengono bloccati o non sono disponibili.
Esempio di chiamata alla funzione requests.get()
con trasmissione della richiesta tramite
proxy.
import requests
# URL a cui viene eseguita la richiesta
url = 'http://httpbin.org/ip'
# Impostazioni del proxy server
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
# Invio della richiesta GET tramite proxy
response = requests.get(url, proxies=proxies)
print(response.json())
Le richieste http passeranno attraverso il primo proxy server, mentre quelle https — attraverso il secondo.
Esempio di utilizzo di un proxy con autenticazione
Molti proxy server richiedono prima di autenticarsi e poi consentono di utilizzarli. Avenirci in aiuto arriva una cosa interessante...
Quando l'URL è stato appena inventato, nel formato URL è stato previsto che in esso si possano inserire direttamente login e password per la risorsa. Si presenta così:
http://user:password@domain/path
Quindi, se il proxy server richiede l'autenticazione, puoi includere le credenziali nell'URL.
Esempio:
import requests
# URL a cui viene eseguita la richiesta
url = 'http://httpbin.org/ip'
# Impostazioni del proxy server con autenticazione
proxies = {
'http': 'http://user:password@10.10.1.10:3128',
'https': 'http://user:password@10.10.1.10:1080',
}
# Invio della richiesta GET tramite proxy
response = requests.get(url, proxies=proxies)
print(response.json())
Non ho visto che nella pratica si utilizzi spesso, ma se stai erigendo il tuo server proxy di test, perché no.
Tuttavia, si dovrebbe notare che trasmettere login e password nell'URL può essere rischioso, poiché l'URL può essere salvato nella cronologia del browser o nei log del server. Nelle applicazioni reali, si dovrebbero utilizzare metodi di autenticazione più sicuri.
È importante ricordare la conservazione sicura delle credenziali per i proxy server nelle applicazioni reali. Non conservare mai le password in chiaro nel codice o nei file di configurazione. Invece, utilizza variabili di ambiente o archivi sicuri per i segreti.
6.3 Proxy e http.client
Per lavorare con i proxy server nel modulo http.client
è necessario
configurare manualmente la connessione e le intestazioni della richiesta.
Devi semplicemente indicare host
e
port quando crei la connessione.
Esempio:
# Impostazioni del proxy server
proxy_host = '10.10.1.10'
proxy_port = 3128
# Creazione connessione con il proxy server
conn = http.client.HTTPConnection(proxy_host, proxy_port)
Quindi è necessario stabilire un tunnel con il proxy server, e solo dopo inviargli la richiesta:
dest_url = 'httpbin.org'
dest_path = '/ip'
# Formazione e invio della richiesta
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
Per verificare che il proxy server funzioni correttamente, puoi confrontare il tuo indirizzo IP prima e dopo l'uso del proxy. Per questo, puoi usare servizi che mostrano il tuo attuale indirizzo IP, ad esempio, httpbin.org/ip.
Tutto molto "semplice". Un esempio completo di utilizzo di un proxy HTTP con
http.client
apparirà così:
import http.client
# Impostazioni del proxy server
proxy_host = '10.10.1.10'
proxy_port = 3128
dest_url = 'httpbin.org'
dest_path = '/ip'
# Creazione connessione con il proxy server
conn = http.client.HTTPConnection(proxy_host, proxy_port)
# Formazione e invio della richiesta
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
# Ottenimento della risposta
response = conn.getresponse()
print(response.status, response.reason)
print(response.read().decode('utf-8'))
# Chiusura della connessione
conn.close()
Cosa dire? L'utilizzo del modulo requests
sarà, ovviamente, più semplice.
Ma! Molti moduli e framework utilizzano sotto il cofano proprio
il http.client
a basso livello. Devi sapere come lavorare con esso,
in modo da poter configurare correttamente il loro funzionamento.
Nonostante tutti i vantaggi, l'uso di proxy server può avere anche degli svantaggi. Ad esempio, potrebbe portare a una riduzione della velocità di connessione, poiché le richieste passano attraverso un ulteriore passaggio. Inoltre, alcuni siti potrebbero bloccare l'accesso dai proxy server noti. Quindi, quando si utilizza un proxy, bisogna sempre considerare sia i suoi vantaggi, sia le potenziali limitazioni.
GO TO FULL VERSION