Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Suportul de laborator

Va oferim aici un cod sursă schelet pentru realizarea unui client HTTP scris in C. Aveti deja implementata partea de realizare de conexiune, partea de trimitere, respectiv receptionare bytes de la server in helpers.c si buffer.c.

Fisierele in care voi veti lucra sunt client.c si requests.c. In requests va trebui sa implementati scrierea cererilor de tip GET si POST si in client trebuie sa trimiteti cererea proaspat compusa catre destinatie.

Veti interactiona cu doua servere:

  • Serverul principal scris de noi aflat la adresa 3.248.203.233 pe portul 8080
  • API-ul oferit de Openweather Map aflat la adresa api.openweathermap.org pe portul 80

Exerciții

Pornind de la codul disponibil aici, aveți de implementat următoarele cerințe:

1. Implementati folosind instrucțiunile din îndrumarul de laborator o cerere dummy de tip GET pentru adresa /api/v1/dummy de la serverul principal.


Note

Gasiti aici un exemplu de request GET.


2. Implementati folosind instrucțiunile din îndrumarul de laborator o cerere dummy de tip POST pentru adresa /api/v1/dummy de la serverul principal cu cu orice conținut pentru date de forma application/x-www-form-urlencoded.


Note

Gasiti aici o captura cu mesaje de tip POST. Mai multe detalii despre POST gasiti aici


3. Ne propunem implementarea unei mecanims de autentificare. Implementați folosind instrucțiunile din îndrumarul de laborator o cerere de tip POST pentru adresa /api/v1/auth/login de pe serverul principal folosind username student si password student. Similar cu task-ul precedent datele trebuie să fie de forma application/x-www-form-urlencoded.

4. Folosind cookie-ul obtinut la pasul precedent, care poate fi hardcodat, implmentați o cerere de tip GET către adresa /api/v1/weather/key a serverului principal pentru a obține un cheia cu care vom obține informații despre vreme de la api.openweathermap.org.


Note

Gasiti aici un exemplu de mesaj GET cu cookie.


5. Folosind cheia obținută la exercițiul anterior, implmentați o cerere de tip GET la serverul Openweather Map pentru a obține datele despre vreme, specificând un set de coordonate (latitudine, longitudine) la alegere.


Note

Mai multe informații despre funcționarea API-ului puteți găsi aici.


6. Cu date obținute la punctul precedent, implementați o cerere de tip POST la serverul 3.248.203.233, tot portul 8080, calea /api/v1/weather/{latitudine}/{longitudine} (ex. /api/v1/weather/44.7398/22.2767) pentru verificare.

Pentru acest task, pentru identificarea mai facilă a începutului payload-ului, puteți să țineți cont de faptul că datele servite de serverul Openweather Map încep cu o acoladă ({), fiind un obiect în formatul JSON și nu vor apărea alte acolade în antetul răspunsului. Desigur, nu este obligatoriu să vă folosiți de asta, parsarea răspunsului HTTP fiind o alternativă cel puțin la fel de bună.

7. Implementați o cerere de tip GET către serverul principal pentru efectuarea delogări (LogOut) la /api/v1/auth/logout.

Bonus

  1. Implementați mecanismul necesar de păstrare a cookies-urilor, astfel încât dacă un client deja autentificat încearcă să facă login, el să primească un mesaj de forma “Already logged in!”.
  2. Folositi Postman pentru a testa comenzile HTTP pe care le-ati implementat la laborator. Analizati cererile si raspunsurile primite si identificati elementele din protocol prezentate la curs si laborator.