0%

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 en wat terug. In Networks with Python leerde je wat eronder reist: bytes over een , die in stukken aankomen en zo zijn ingepakt dat de lezer weet waar elk bericht eindigt. Deze cursus brengt die twee samen. , het protocol achter 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.

HoofdstukkenWat je bouwt
1 tot en met 3wire.py, een kleine HTTP-client: eerst een verzoek dat je met de hand op een schrijft, daarna verzoeken die je bouwt uit elke , daarna http.client uit de standaardbibliotheek, dat het socketwerk doet
4 tot en met 9een leeslijstserver, een JSON-API voor boeken, die stap voor stap groeit: boeken lezen en schrijven, , inloggen, caching en veel verzoeken over één verbinding
10 en 11een client voor die server op requests en httpx, en dezelfde server herschreven met een webframework,
12het 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 die je gebruikt kunt benoemen.

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 -versleuteling verpakt; hoofdstuk 9 legt uit wat dat toevoegt en waarom de site het niet kan laten zien. Alles wat je hier ziet is gewone HTTP, zodat je elke byte kunt lezen.

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 n bytes kunt lezen met read_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.