Ga naar hoofdinhoud

Te veel verzoeken: zelf twintig verzoeken

Hier bouw je op verder: De for-loop

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

In les 2 mat je één verzoek. Nu stuur je er twintig achter elkaar naar je eigen server, en tel je hoeveel er antwoord krijgen.

Twintig verzoeken​

Start je server met fastapi dev main.py, met het endpoint uit les 1. Maak een bestand test_verzoeken.py:

import httpx

adres = "http://127.0.0.1:8000/"

gelukt = 0
for nummer in range(20):
antwoord = httpx.get(adres)
print(f"Verzoek {nummer + 1}: status {antwoord.status_code}")
if antwoord.status_code == 200:
gelukt += 1

print(f"Gelukt: {gelukt} van de 20")
  1. Regel 3:

    Alleen je eigen server, zoals in les 1.

  2. Regel 5:

    gelukt telt hoeveel verzoeken antwoord 200 krijgen.

  3. Regel 6-10:

    De for-loop stuurt twintig keer hetzelfde GET-verzoek. Elke keer dat het lukt, gaat de teller één omhoog.

Draai het in een tweede terminal:

python test_verzoeken.py

Dit is de zwakheid​

Twintig verzoeken zijn niets voor je server. Maar elk verzoek krijgt antwoord, hoe vaak het ook komt en van wie. Er is niets in je server dat zegt "zo is het wel genoeg". Zet in gedachten range(20) op range(20000), en laat dat door duizend computers tegelijk doen: zo ziet een aanval eruit. Wat zo'n aanval is, zie je in les 4, en in les 5 zet je er een grens op.

Controlevraag
Je draait test_verzoeken.py daarna meteen nog twee keer, zonder iets op te slaan. Wat print de derde keer op de laatste regel?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

Er gaat iets mis​

Gelukt: 0 van de 20​

Elke regel zegt status 404, en aan het eind staat Gelukt: 0 van de 20.

Oorzaak: het adres klopt niet, bijvoorbeeld omdat er een pad als /test in adres staat terwijl je server alleen / kent.

Oplossing: open http://127.0.0.1:8000/ in je browser. Zie je daar Hallo wereld!, zet dan precies dat adres in adres.

ConnectError​

Het script stopt meteen met een httpx.ConnectError.

Oorzaak: je server draait niet, zoals in les 2.

Oplossing: start je server in de eerste terminal met fastapi dev main.py, en draai het script opnieuw.

Opdrachten​

Opdracht 1: Predict - Vijftig keer​

Je verandert range(20) in range(50) en draait het script opnieuw.

Vraag: hoeveel verzoeken lukken er, en ligt je server daarna plat?

Tip

Er is nog niets dat je server laat weigeren. Kijk ook goed naar de laatste print.

Antwoord

Alle vijftig lukken. De laatste regel is:

Gelukt: 50 van de 20

Het getal 20 staat vast in de laatste print. Pas je dat aan naar 50, dan staat er Gelukt: 50 van de 50. Je server ligt niet plat: open na het script http://127.0.0.1:8000/, en je krijgt meteen antwoord. Of dat ook zo is terwijl het script nog loopt, probeer je in les 4.

Door naar les 4: DoS en DDoS.