Configurați un server Internet în Python folosind Socket

click fraud protection

Ca un complement al tutorialului pentru clientul de rețea, acest tutorial arată cum să implementați un server web simplu Piton. Cu siguranță, acesta nu este un substitut pentru Apache sau Zope. Există, de asemenea, modalități mai solide de a implementa servicii web în Python, folosind module precum BaseHTTPServer. Acest server utilizează exclusiv modulul socket.

Vă amintiți că modulul socket este coloana vertebrală a majorității modulelor de servicii web Python. Ca și în cazul clientului de rețea simplă, construirea unui server cu acesta ilustrează în mod transparent elementele de bază ale serviciilor web în Python. BaseHTTPServer în sine importă modulul socket pentru a afecta un server.

Prin revizuire, toate tranzacțiile de rețea se petrec între clienți și servere. În majoritatea protocoalelor, clienții cer o anumită adresă și primesc date.

În cadrul fiecărei adrese, se pot rula o multitudine de servere. Limita este în hardware. Cu un hardware suficient (RAM, viteza procesorului etc.), același computer poate servi ca server web, server ftp și

instagram viewer
server de mail (pop, smtp, imap sau toate cele de mai sus) toate în același timp. Fiecare serviciu este asociat cu un port. Portul este legat de o priză. Serverul ascultă portul său asociat și oferă informații atunci când sunt primite cereri pe portul respectiv.

Deci, pentru a afecta o conexiune de rețea, trebuie să cunoașteți gazda, portul și acțiunile permise pe acel port. Majoritatea serverelor web rulează pe portul 80. Cu toate acestea, pentru a evita conflictul cu un server Apache instalat, serverul nostru web va rula pe portul 8080. Pentru a evita conflictul cu alte servicii, este mai bine să păstrați serviciile HTTP pe portul 80 sau 8080. Acestea sunt cele mai frecvente două. Evident, dacă acestea sunt utilizate, trebuie să găsiți un port deschis și să alertați utilizatorii cu privire la schimbare.

Ca și în cazul clientului de rețea, trebuie să rețineți că aceste adrese sunt numerele de port comune pentru diferitele servicii. Atâta timp cât clientul solicită serviciul corect pe portul corect la adresa corectă, comunicarea va avea loc în continuare. Google Serviciul de poștă, de exemplu, nu a rulat inițial pe numerele portului obișnuit, dar, deoarece știu să-și acceseze conturile, utilizatorii pot totuși să primească poștă.

Spre deosebire de clientul de rețea, toate variabilele din server sunt reduse. Orice serviciu care se așteaptă să funcționeze constant nu trebuie să aibă variabilele logicii sale interne setate la linia de comandă. Singura variantă ar fi dacă, din anumite motive, ați dori ca serviciul să funcționeze ocazional și pe diverse numere de port. Dacă acesta ar fi cazul, totuși, veți putea totuși să urmăriți ora sistemului și să modificați legăturile în consecință.

După cum am menționat deja, serverul trebuie să cunoască gazda la care urmează să fie asociat și portul pe care să îl asculte. În scopul nostru, vom solicita serviciul să se aplice oricărui nume de gazdă.

Portul, după cum am menționat anterior, va fi 8080. Așadar, rețineți că, dacă utilizați acest server împreună cu clientul de rețea, va trebui să schimbați numărul de port utilizat în acesta program.

Fie că solicitați informații, fie că o pot servi, pentru a accesa Internet, trebuie să creăm o priză. Sintaxa acestui apel este următoarea:

Primele două sunt, evident, protocoale de internet. Orice lucru care călătorește pe internet poate fi accesat în aceste familii. Multe rețele încă nu rulează pe IPv6. Deci, dacă nu știți altfel, este cel mai sigur să setați în mod implicit IPv4 și să folosiți AF_INET.

De departe, cele mai frecvente tipuri sunt SOCK_STEAM și SOCK_DGRAM, deoarece funcționează pe cele două protocoale ale suitei IP (TCP și UDP). Ultimele trei sunt mult mai rare și deci nu pot fi întotdeauna susținute.

După crearea soclului, trebuie să setăm opțiunile de socket. Pentru orice obiect socket, puteți seta opțiunile de socket folosind metoda setsockopt (). Sintaxa este următoarea:

Dacă dorim să oferim feedback persoanei care apelează serverul, am putea introduce acum o comandă de imprimare pentru a confirma că serverul este în funcțiune.

După configurarea serverului, acum trebuie să le spunem Piton ce trebuie de făcut atunci când se face o cerere pe portul dat. Pentru aceasta facem referință la cererea ei prin valoarea ei și o folosim ca argument al unei bucle persistente în timp ce.

Când se face o solicitare, serverul ar trebui să accepte solicitarea și să creeze un obiect de fișier pentru a interacționa cu aceasta.

În acest caz, serverul folosește același port pentru citire și scriere. Prin urmare, metoda makefile primește un argument „rw”. Lungimea nulă a dimensiunii tamponului lasă pur și simplu acea parte a fișierului să fie determinată dinamic.

Dacă nu dorim să creăm un server cu o singură acțiune, următorul pas este să citim intrarea din obiectul fișier. Când facem asta, ar trebui să fim atenți să eliminăm această intrare a excesului de spațiu alb.

Cererea va avea forma unei acțiuni, urmată de o pagină, protocolul și versiunea protocolului utilizat. Dacă se dorește servirea unei pagini web, se împarte această intrare pentru a prelua pagina solicitată și apoi se citește pagina respectivă într-o variabilă care este apoi scrisă în obiectul fișierului socket. O funcție pentru citirea unui fișier într-un dicționar poate fi găsită pe blog.

Pentru a face acest tutorial un pic mai ilustrativ despre ceea ce se poate face cu modulul socket, vom renunța la acea parte a serverului și vom arăta în schimb modul în care se poate nuanța prezentarea datelor. Introduceți următoarele câteva linii în program.

Dacă cineva trimite o pagină web, prima linie este un mod frumos de introducere a datelor într-un browser web. Dacă este lăsat afară, majoritatea browserelor web vor fi implicit la randare HTML. Cu toate acestea, dacă o include, trebuie să fie respectat „OK” Două caractere de linii noi. Acestea sunt utilizate pentru a distinge informațiile de protocol de conținutul paginii.

Sintaxa primei linii, după cum probabil puteți supune, este protocolul, versiunea protocolului, numărul mesajului și starea. Dacă ați accesat vreodată o pagină web care s-a mutat, ați primit probabil o eroare 404. Mesajul 200 de aici este pur și simplu mesajul afirmativ.

Restul rezultatului este pur și simplu o pagină web împărțită pe mai multe linii. Veți observa că serverul poate fi programat pentru a utiliza datele utilizatorului în ieșire. Linia finală reflectă solicitarea web așa cum a fost primită de server.

În cele din urmă, ca acte de închidere a cererii, trebuie să închidem obiectul fișierului și soclul serverului.

Acum salvați acest program sub un nume de recunoscut. După ce îl sunați cu „python program_name.py”, dacă ați programat un mesaj pentru a confirma serviciul ca este în funcțiune, acest lucru ar trebui să se imprime pe ecran. Terminalul va părea apoi să se întrerupă. Totul este așa cum trebuie. Deschideți browserul web și accesați localhost: 8080. Ar trebui să vedeți apoi ieșirea comenzilor de scriere pe care le-am dat. Vă rugăm să rețineți că, din motive de spațiu, nu am implementat gestionarea erorilor în acest program. Cu toate acestea, orice program lansat în „sălbatic” ar trebui.

instagram story viewer