Labo 7 — HTTP als protocol
In dit labo oefen je met HTTP-requests via curl, Postman en de DevTools Network tab. Je werkt met de publieke testapi jsonplaceholder.typicode.com.
Raadpleeg deze sectie als je iets wil nalezen:
Oefening 1 — Je eerste GET-request
- Open een terminal (Git Bash op Windows, Terminal op macOS/Linux).
- Stuur een GET-request naar
https://jsonplaceholder.typicode.com/posts/1metcurl -v. - Wijs in de uitvoer aan: de request line, de request headers, de statuscode en de response body.
- Stuur nu een GET-request naar een post die niet bestaat:
https://jsonplaceholder.typicode.com/posts/9999. - Welke statuscode krijg je terug? In welke categorie (2xx/3xx/4xx/5xx) zit die?
Oefening 2 — Een POST-request sturen
- Stuur een POST-request naar
https://jsonplaceholder.typicode.com/postsmet als body:{"title": "Mijn eerste post", "body": "Dit is een test.", "userId": 1} - Welke statuscode krijg je terug? Klopt die met wat je verwacht van een POST die iets aanmaakt?
- Vergelijk de body die je stuurde met de body die je terugkreeg. Wat is er toegevoegd?
- Stuur dezelfde request nogmaals, maar zonder de
Content-Type: application/jsonheader. Wat verandert er in de response?
Oefening 3 — Dezelfde requests in Postman
- Herhaal de GET-request uit Oefening 1 in Postman.
- Herhaal de POST-request uit Oefening 2 in Postman.
- Vergelijk voor beide requests: methode, statuscode, request headers, response headers en body.
- Noteer minstens twee dingen die je in Postman makkelijker terugvindt dan in de ruwe curl-uitvoer, en minstens één ding dat curl juist duidelijker toont.
Oefening 4 — De DevTools Network tab
- Open
https://jsonplaceholder.typicode.comin je browser en open de DevTools (F12) → tabblad Network. - Ververs de pagina en klik het eerste document-request aan.
- Doorloop de tabbladen Headers, Response en Timing. Noteer per tabblad welke informatie je er vindt.
- Open de console (tabblad Console) en voer uit:
fetch('https://jsonplaceholder.typicode.com/users/1').then(r => r.json()).then(console.log)
- Zoek dit request terug in de Network tab. Welke methode, statuscode en response headers zie je?
Oefening 5 — De juiste HTTP-methode kiezen
Voor elk scenario: kies GET, POST, PUT of DELETE en motiveer in één zin.
- Een gebruiker bekijkt de lijst van zijn bestellingen.
- Een gebruiker plaatst een nieuwe bestelling.
- Een gebruiker wijzigt zijn volledige verzendadres.
- Een gebruiker annuleert en verwijdert een bestelling.
- Een pagina laadt de details van één specifiek product.
- Een gebruiker vervangt zijn volledige profiel (naam, e-mail, adres) door nieuwe gegevens.
Oefening 6 — Statuscodes diagnosticeren
Voor elke statuscode: geef de categorie (2xx/3xx/4xx/5xx) en beschrijf in één zin waar je het probleem zou zoeken (bij jouw request, of bij de server).
200 OK201 Created301 Moved Permanently400 Bad Request401 Unauthorized404 Not Found500 Internal Server Error503 Service Unavailable
Oefening 7 — CORS-fout uitlokken en oplossen
- Open de console (F12) op een willekeurige webpagina.
- Voer uit:
fetch('https://www.google.com').then(r => r.text())
- Lees de foutmelding in de console. Welke header wordt genoemd? Wat zegt de foutmelding letterlijk?
- Voer nu uit:
fetch('https://jsonplaceholder.typicode.com/posts/1').then(r => r.json()).then(console.log)
- Dit werkt wél. Zoek in de Network tab de response headers van dit request op en noteer de waarde van
Access-Control-Allow-Origin. - Verklaar in twee tot drie zinnen: waarom blokkeert de browser het eerste
fetch()-verzoek, maar niet het tweede? Wie beslist dit — de browser of de server?
Het fetch()-verzoek naar Google wordt wel degelijk uitgevoerd — de server antwoordt gewoon. De browser blokkeert enkel dat jouw JavaScript-code de response mag lezen.
Oefening 8 — Een PATCH-request sturen
- Stuur een PATCH-request naar
https://jsonplaceholder.typicode.com/posts/1met als body:{"title": "Enkel de titel gewijzigd"} - Vergelijk de response met die van Oefening 2 (POST) en met wat een PUT zou doen. Welke velden staan er in de response, en wat zegt dat over het verschil tussen PATCH en PUT?
Oefening 9 — Meerdere headers meesturen
- Stuur een POST-request naar
https://jsonplaceholder.typicode.com/postsmet twee headers:Content-Type: application/jsonénAccept: application/json, en dezelfde body als in Oefening 2. - Welke curl-flag gebruik je om een tweede header toe te voegen?
Oefening 10 — Formulierdata versturen (application/x-www-form-urlencoded)
- Stuur een POST-request naar
https://httpbin.org/postmet headerContent-Type: application/x-www-form-urlencodeden bodynaam=Robin&les=3. - Zoek in de JSON-response van httpbin het veld
"form"op. Staan je gegevens daar correct in? - Vergelijk deze aanpak met het versturen van een JSON-body: wat verschilt er in de header en in de manier waarop je de body opbouwt?
Oefening 11 — Een response opslaan als bestand
- Stuur een GET-request naar
https://jsonplaceholder.typicode.com/postsen sla de response-body op alsposts.jsonin plaats van ze te printen. - Welke curl-flag gebruik je hiervoor? Controleer met
ls -lh posts.jsondat het bestand is aangemaakt.
Oefening 12 — Een bestand uploaden
- Maak een klein testbestand aan:
echo "Dit is een testbestand" > testbestand.txt. - Upload dat bestand als
multipart/form-datanaarhttps://httpbin.org/post. - Zoek in de JSON-response het veld
"files"op. Staat de inhoud van je bestand erin?
Oefening 13 — URL-gecodeerde query-parameters
- Vraag de comments bij post 1 op (
https://jsonplaceholder.typicode.com/comments) via een query-parameterpostId=1, maar gebruik nu curl's ingebouwde URL-encoding in plaats van de parameter zelf in de URL te typen. - Vergelijk het resultaat met het manueel toevoegen van
?postId=1aan de URL. Zijn ze identiek? In welke situatie is de ingebouwde encoding veiliger?
Uitdaging — Request-zoektocht
Los onderstaande opdrachten op met curl, Postman of de DevTools Network tab — kies zelf je tool per vraag.
- Welke statuscode krijg je als je een DELETE-request stuurt naar
https://jsonplaceholder.typicode.com/posts/1? - Welke
Content-Type-header staat in de response van een GET-request naar/posts? - Hoeveel posts staan er in totaal in
https://jsonplaceholder.typicode.com/posts(tip: tel de JSON-array)? - Wat is de statuscode wanneer je een PUT-request stuurt naar
/posts/1met een lege body? - Welke HTTP-versie staat vermeld in de request line wanneer je curl gebruikt?
- Zoek een
Cache-Control-header op in een response van jsonplaceholder. Bij welk request vond je die?
Schrijf per vraag op welke tool je gebruikte en hoe je aan het antwoord kwam.