Konfigurer en Internett-server i Python Using Socket

click fraud protection

Som et supplement til opplæringen til nettverksklienten, viser denne opplæringen hvordan du implementerer en enkel webserver i Python. For å være sikker, er dette ingen erstatning for Apache eller Zope. Det er også mer robuste måter å implementere webtjenester i Python ved å bruke moduler som BaseHTTPServer. Denne serveren bruker utelukkende socket-modulen.

Du vil huske at socket-modulen er ryggraden i de fleste Python webtjenestemoduler. Som med den enkle nettverksklienten, illustrerer det å bygge en server med det grunnleggende om nettjenester i Python på en transparent måte. BaseHTTPServer importerer selv socketmodulen for å påvirke en server.

Som en gjennomgang skjer alle nettverkstransaksjoner mellom klienter og servere. I de fleste protokoller spør kundene en bestemt adresse og mottar data.

Innenfor hver adresse kan et mangfold av servere kjøres. Grensen er i maskinvaren. Med tilstrekkelig maskinvare (RAM, prosessorhastighet osv.) Kan den samme datamaskinen fungere som en webserver, en ftp-server og

instagram viewer
postserver (pop, smtp, imap, eller alt dette) på samme tid. Hver tjeneste er tilknyttet en port. Porten er bundet til en stikkontakt. Serveren lytter til den tilknyttede porten og gir informasjon når forespørsler mottas på den porten.

Så for å påvirke en nettverkstilkobling, må du kjenne verten, porten og handlingene som er tillatt på den porten. De fleste webservere kjører på port 80. For å unngå konflikt med en installert Apache-server, vil imidlertid webserveren vår kjøre på port 8080. For å unngå konflikt med andre tjenester er det best å beholde HTTP-tjenester i port 80 eller 8080. Dette er de to vanligste. Hvis disse brukes, må du selvsagt finne en åpen port og varsle brukere om endringen.

Som med nettverksklienten, må du merke deg at disse adressene er de vanlige portnumrene for de forskjellige tjenestene. Så lenge klienten ber om riktig service på riktig port på riktig adresse, vil kommunikasjonen fortsatt skje. Googles posttjeneste, for eksempel, kjørte ikke opprinnelig på de vanlige portnumrene, men fordi de vet hvordan de skal få tilgang til kontoene sine, kan brukerne fortsatt få posten.

I motsetning til nettverksklienten, er alle variabler på serveren fastkablet. Enhver tjeneste som forventes å kjøre kontinuerlig, bør ikke ha variablene til den interne logikken satt på kommandolinjen. Den eneste variasjonen på dette ville være hvis du av en eller annen grunn ønsket at tjenesten skulle kjøres av og til og på forskjellige portnumre. Hvis dette var tilfelle, vil du likevel kunne se systemtid og endre bindinger tilsvarende.

Som allerede nevnt, trenger serveren å kjenne verten den skal knyttes til, og porten den skal lytte til. For vårt formål skal vi i det hele tatt ha tjenesten gjeldende for ethvert vertsnavn.

Havnen blir som nevnt tidligere 8080. Så merk at hvis du bruker denne serveren sammen med nettverksklienten, må du endre portnummeret som brukes i det program.

Enten å be om informasjon eller å tjene den, for å få tilgang til Internett, må vi lage en stikkontakt. Syntaks for denne samtalen er som følger:

De to første er åpenbart internettprotokoller. Alt som reiser over internett kan nås i disse familiene. Mange nettverk kjører fortsatt ikke på IPv6. Så med mindre du vet noe annet, er det tryggest å standard IPv4 og bruke AF_INET.

De aller vanligste typene er langt på vei SOCK_STEAM og SOCK_DGRAM fordi de fungerer på de to protokollene til IP-suiten (TCP og UDP). De tre sistnevnte er mye sjeldnere og støttes kanskje ikke alltid.

Etter å ha laget stikkontakten, må vi deretter angi stikkontaktalternativene. For alle socketobjekter kan du stille inn socketalternativene ved å bruke metoden setsockopt (). Syntaksen er som følger:

Hvis vi ønsker å gi tilbakemelding til personen som ringer serveren, kan vi nå legge inn en utskriftskommando for å bekrefte at serveren er i gang.

Etter å ha konfigurert serveren, må vi nå fortelle det Python hva du skal gjøre når en forespørsel blir gitt på den gitte porten. For dette refererer vi til forespørselen etter dens verdi og bruker den som argumentet for en vedvarende mens sløyfe.

Når en forespørsel fremsettes, skal serveren godta forespørselen og opprette et filobjekt for å samhandle med den.

I dette tilfellet bruker serveren den samme porten for lesing og skriving. Derfor gis makefile-metoden et argument 'rw'. Nulllengden på bufferstørrelsen lar den delen av filen ganske enkelt bestemmes dynamisk.

Med mindre vi ønsker å lage en server med én handling, er neste trinn å lese innspill fra filobjektet. Når vi gjør det, bør vi være forsiktige med å fjerne den tilførselen av overflødig hvitrom.

Forespørselen kommer i form av en handling, etterfulgt av en side, protokollen og versjonen av protokollen som brukes. Hvis man ønsker å tjene en webside, deler man denne inngangen for å hente den forespurte siden og leser siden på en variabel som deretter skrives til socket-filobjektet. En funksjon for å lese en fil i en ordbok finner du i bloggen.

For å gjøre denne opplæringen litt mer illustrerende for hva man kan gjøre med socketmodulen, vil vi gi avkall på den delen av serveren og i stedet vise hvordan man kan nyansere presentasjonen av data. Legg inn de neste flere linjene i program.

Hvis man sender en webside, er den første linjen en fin måte å introdusere dataene til en nettleser. Hvis det ikke er mulig, vil de fleste nettlesere som standard gjengis HTML. Imidlertid, hvis en inkluderer det, må 'OK' følges av to nye linjetegn. Disse brukes til å skille protokollinformasjon fra sideinnholdet.

Syntaksen til den første linjen, som du sannsynligvis kan anta, er protokoll, protokollversjon, meldingsnummer og status. Hvis du noen gang har gått til en webside som har flyttet seg, har du sannsynligvis fått en 404-feil. 200-meldingen her er ganske enkelt den bekreftende meldingen.

Resten av utdataene er ganske enkelt en webside oppdelt over flere linjer. Du vil merke deg at serveren kan programmeres til å bruke brukerdata i utdataene. Den siste linjen gjenspeiler nettforespørselen da den ble mottatt av serveren.

Til slutt, som avslutningshandlingene for forespørselen, må vi lukke filobjektet og serverkontakten.

Lagre dette programmet under et gjenkjennelig navn. Etter at du har kalt den med 'python program_name.py', hvis du programmerte en melding for å bekrefte at tjenesten kjører, bør dette skrives ut på skjermen. Terminalen vil da se ut til pause. Alt er som det skal være. Åpne nettleseren din og gå til localhost: 8080. Du skal da se utdataene fra skrivekommandoene vi ga. Vær oppmerksom på at jeg for plassens skyld ikke implementerte feilhåndtering i dette programmet. Imidlertid bør ethvert program utgitt i det "ville".

instagram story viewer