Hoofdstuk 1
HTTP is tekst op een socket
Welkom bij de cursus
Hoi, ik ben Erik. Ik schrijf en onderhoud deze cursus, net als de rest van Python Land.
Aan het eind van Python in Practice stuurde één aanroep van requests.get iets naar de oefen-API, en kwamen er een requests.get, blijkt te bestaan uit regels tekst over precies zo’n verbinding, en je schrijft beide kanten ervan zelf.
Wat je gaat bouwen
De cursus volgt één project van begin tot eind.
| Hoofdstukken | Wat je bouwt |
|---|---|
| 1 tot en met 3 | wire.py, een kleine HTTP-client: eerst een verzoek dat je met de hand op een http.client uit de standaardbibliotheek, dat het socketwerk doet |
| 4 tot en met 9 | een leeslijstserver, een JSON-API voor boeken, die stap voor stap groeit: boeken lezen en schrijven, |
| 10 en 11 | een client voor die server op requests en httpx, en dezelfde server herschreven met een webframework, |
| 12 | het eindproject: de afgewerkte server en client, samen bewezen |
Elke bibliotheek komt pas nadat je met de hand hebt geschreven wat ze doet, zodat je het mechanisme achter elke
Wat de site wel en niet kan bereiken
Geen enkele les in deze cursus neemt contact op met een echte website. De sandboxes van Python Land hebben geen route naar het openbare internet, en niets hier doet alsof dat anders is.
Je code praat met twee soorten servers, en alleen met deze twee:
practice-api, een kleine HTTP-dienst die je alleen kunt lezen, op het interne netwerk van Python Land. Hij heeft geen openbaar adres. Hoofdstuk 1 tot en met 3 sturen er verzoeken naar, en één les in hoofdstuk 10 ook.
servers die je zelf schrijft. Vanaf hoofdstuk 4 luistert je eigen server alleen op het
127.0.0.1, het adres waarmee een machine met zichzelf praat, en stopt hij met opzet na een vast aantal verbindingen.
De site gebruikt ook geen versleutelde verbindingen. Echte websites gebruiken HTTPS, dat HTTP in
Wat deze cursus van je vraagt
Je hebt Networks with Python nodig. De lessen verwachten dat je:
een TCP-verbinding met een time-out kunt openen en bytes kunt versturen met
sendall;een ontvangstbuffer kunt bijhouden, zodat bytes die te vroeg aankomen wachten op de volgende leesactie;
precies
nbytes kunt lezen metread_exact;een functie een
connect-kunt geven, zodat een test er een fake socket aan kan meegeven in plaats van een netwerk.
Uit Python in Practice heb je vooral één ding nodig: één aanroep van requests.get met een time-out, waarvan je de status controleerde en de JSON decodeerde. Deze cursus haalt die aanroep uit elkaar.
Python Fundamentals II wordt aangeraden, maar is niet verplicht. Vanaf hoofdstuk 4 bevatten sommige bestanden die de cursus meelevert class-regels en regels die met @ beginnen. De lessen leggen uit wat je nodig hebt om ze te lezen, en geen enkele oefening vraagt je om een van de twee zelf te schrijven. Wil je die bestanden helemaal begrijpen, dan leert Fundamentals II je allebei.
Naar welke servers stuurt je code in deze cursus verzoeken?
Maak kennis met Monty
Monty is de leergids van Python Land en staat naast elke les. Vraag om een tweede uitleg, een hint die het antwoord niet weggeeft, of hulp bij het lezen van een foutmelding.
Als je bent ingelogd, krijg je met een gratis account 5 keer Monty-hulp per dag, gedeeld over alle cursussen. Een goede eerste vraag hier:
Wat deed een socket in gewone woorden voor mijn programma’s in Networks with Python?
Het antwoord is een nuttige opfrisser voor de volgende les, die laat zien hoe een HTTP-verzoek er op die socket uitziet.
Met Guided krijg je tot 50 keer Monty-hulp per dag. Vragen, hints, foutuitleg, extra oefeningen en codefeedback delen dezelfde dagelijkse limiet. De teller laat zien hoeveel hulp je nog hebt en wanneer de limiet wordt vernieuwd. Elke les en gewone herkansing van een oefening blijft gratis.
Als je de vraag hierboven hebt beantwoord, opent de volgende les een HTTP-verzoek en het antwoord erop als bytes, en laat zien dat beide uit regels bestaan.