Configurare un server Internet in Python utilizzando Socket

A complemento dell'esercitazione del client di rete, questa esercitazione mostra come implementare un semplice server Web in Pitone. A dire il vero, questo non è un sostituto di Apache o Zope. Esistono anche modi più efficaci per implementare i servizi Web in Python, usando moduli come BaseHTTPServer. Questo server utilizza esclusivamente il modulo socket.

Ricorderai che il modulo socket è la spina dorsale della maggior parte dei moduli del servizio Web Python. Come con il semplice client di rete, la creazione di un server con esso illustra in modo trasparente le basi dei servizi Web in Python. BaseHTTPServer stesso importa il modulo socket per influenzare un server.

A titolo di revisione, tutte le transazioni di rete avvengono tra client e server. Nella maggior parte dei protocolli, i client richiedono un determinato indirizzo e ricevono dati.

All'interno di ciascun indirizzo, è possibile eseguire una moltitudine di server. Il limite è nell'hardware. Con hardware sufficiente (RAM, velocità del processore, ecc.), Lo stesso computer può fungere da server Web, server ftp e

instagram viewer
server email (pop, smtp, imap o tutto quanto sopra) tutti contemporaneamente. Ogni servizio è associato a una porta. La porta è associata a un socket. Il server ascolta la porta associata e fornisce informazioni quando vengono ricevute richieste su quella porta.

Pertanto, per influire su una connessione di rete è necessario conoscere l'host, la porta e le azioni consentite su quella porta. La maggior parte dei server Web funziona sulla porta 80. Tuttavia, al fine di evitare conflitti con un server Apache installato, il nostro server Web verrà eseguito sulla porta 8080. Per evitare conflitti con altri servizi, è meglio mantenere i servizi HTTP sulla porta 80 o 8080. Questi sono i due più comuni. Ovviamente, se utilizzati, è necessario trovare una porta aperta e avvisare gli utenti della modifica.

Come per il client di rete, è necessario tenere presente che questi indirizzi sono i numeri di porta comuni per i diversi servizi. Finché il client richiede il servizio corretto sulla porta giusta all'indirizzo giusto, la comunicazione avverrà comunque. Google il servizio di posta, ad esempio, inizialmente non veniva eseguito sui numeri di porta comuni ma, poiché sanno come accedere ai propri account, gli utenti possono comunque ricevere la posta.

A differenza del client di rete, tutte le variabili nel server sono cablate. Qualsiasi servizio che dovrebbe essere eseguito costantemente non dovrebbe avere le variabili della sua logica interna impostata nella riga di comando. L'unica variazione su questo sarebbe se, per qualche motivo, si volesse che il servizio venisse eseguito occasionalmente e su vari numeri di porta. In tal caso, tuttavia, sarebbe comunque possibile controllare l'ora del sistema e modificare i collegamenti di conseguenza.

Come già accennato, il server deve conoscere l'host a cui deve essere associato e la porta su cui ascoltare. Per i nostri scopi, dovremo applicare il servizio a qualsiasi nome host.

Il porto, come accennato in precedenza, sarà 8080. Pertanto, se si utilizza questo server in combinazione con il client di rete, sarà necessario modificare il numero di porta utilizzato programma.

Se richiedere informazioni o servirle, al fine di accedere a Internet, dobbiamo creare un socket. La sintassi per questa chiamata è la seguente:

I primi due sono ovviamente i protocolli Internet. Tutto ciò che viaggia su Internet è accessibile in queste famiglie. Molte reti non funzionano ancora su IPv6. Pertanto, a meno che non si sappia diversamente, è più sicuro impostare automaticamente IPv4 e utilizzare AF_INET.

Di gran lunga i tipi più comuni sono SOCK_STEAM e SOCK_DGRAM perché funzionano sui due protocolli della suite IP (TCP e UDP). Gli ultimi tre sono molto più rari e quindi potrebbero non essere sempre supportati.

Dopo aver creato il socket, dobbiamo quindi impostare le opzioni del socket. Per qualsiasi oggetto socket, è possibile impostare le opzioni socket utilizzando il metodo setsockopt (). La sintassi è la seguente:

Se vogliamo fornire un feedback alla persona che chiama il server, ora possiamo inserire un comando di stampa per confermare che il server è attivo e in esecuzione.

Avendo configurato il server, ora dobbiamo dirlo Pitone cosa fare quando viene effettuata una richiesta sulla porta specificata. Per questo facciamo riferimento alla richiesta in base al suo valore e la usiamo come argomento di un ciclo while persistente.

Quando viene effettuata una richiesta, il server deve accettare la richiesta e creare un oggetto file per interagire con essa.

In questo caso, il server utilizza la stessa porta per leggere e scrivere. Pertanto, al metodo makefile viene dato un argomento 'rw'. La lunghezza nulla della dimensione del buffer lascia semplicemente che quella parte del file sia determinata dinamicamente.

A meno che non desideriamo creare un server a singola azione, il passaggio successivo è leggere l'input dall'oggetto file. Quando lo facciamo, dovremmo fare attenzione a rimuovere quell'input di spazio bianco in eccesso.

La richiesta arriverà sotto forma di un'azione, seguita da una pagina, dal protocollo e dalla versione del protocollo in uso. Se si desidera servire una pagina Web, si divide questo input per recuperare la pagina richiesta e quindi la legge in una variabile che viene quindi scritta nell'oggetto file socket. Nel blog è disponibile una funzione per leggere un file in un dizionario.

Per rendere questo tutorial un po 'più illustrativo di ciò che si può fare con il modulo socket, rinunciamo a quella parte del server e mostreremo invece come si può sfumare la presentazione dei dati. Immettere le successive diverse righe nel programma.

Se si sta inviando una pagina Web, la prima riga è un buon modo per introdurre i dati in un browser Web. Se viene lasciato fuori, la maggior parte dei browser Web eseguirà il rendering predefinito HTML. Tuttavia, se uno lo include, deve essere seguito da "OK" Due nuovi caratteri di linea. Questi sono usati per distinguere le informazioni del protocollo dal contenuto della pagina.

La sintassi della prima riga, come probabilmente si può supporre, è protocollo, versione del protocollo, numero di messaggio e stato. Se sei mai passato a una pagina web che si è spostata, probabilmente hai ricevuto un errore 404. Il messaggio 200 qui è semplicemente il messaggio affermativo.

Il resto dell'output è semplicemente una pagina Web suddivisa su più righe. Noterai che il server può essere programmato per utilizzare i dati utente nell'output. L'ultima riga riflette la richiesta Web così come è stata ricevuta dal server.

Infine, come atti di chiusura della richiesta, dobbiamo chiudere l'oggetto file e il socket del server.

Ora salva questo programma con un nome riconoscibile. Dopo averlo chiamato con 'python nome_programma.py', se hai programmato un messaggio per confermare che il servizio è in esecuzione, questo dovrebbe essere stampato sullo schermo. Il terminale sembrerà quindi mettere in pausa. Tutto è come dovrebbe essere. Apri il tuo browser e vai su localhost: 8080. Dovresti quindi vedere l'output dei comandi di scrittura che abbiamo dato. Si noti che, per motivi di spazio, non ho implementato la gestione degli errori in questo programma. Tuttavia, qualsiasi programma rilasciato in "wild" dovrebbe.

instagram story viewer