SFML i HTTP

Wstęp


Taka uwaga czysto ode mnie: moja znajomość HTTP jest dość mała i ostrzegam, że mogą się zdarzyć błędy w przetłumaczonych nazwach itp. Jeżeli takie się zdarzą dajcie znać w komentarzach.

SFML posiada prostą klasę klienta HTTP, dzięki której możesz się komunikować z serwerami web. Tak jak wspomniałem prostą komunikację, czyli możesz korzystać z: HTTP: POST, GET i żądań typów HEAD, zdobywanie dostępu do nagłówków pól HEAD oraz czytania/pisania stron.

Jeżeli to dla ciebie za mało i potrzebujesz np dostępu do HTTPS to odsyłam cię do bibliotek stworzonych właśnie w tym celu jak libcurl czy cpp-netlib.

Jednak do podstawowej komunikacji pomiędzy programem a serwerem web funkcje zawarte w SFML powinny nam wystarczyć.

 

sf::Http


Do komunikowania z serwerami HTTP używamy klasy sf::Http.

Zauważ, że nie dokonujemy tutaj żadnego połączenia, a jedynie ustawiamy adres z którym będziemy się łączyć. Nasz program łączy się jedynie tymczasowo przy każdej wykonywanej czynności.

Tutaj jest w zasadzie tylko jedna metoda wysyłająca żądania do strony i to jest w zasadzie wszystko co ta klasa robi.

 

Żądania (requests)


Żądania HTTP reprezentowane są przez klasę sf::Http::Request. Klasa ta może zawierać poniższe informacje:

  • metoda: POST (wysyła jakieś dane), GET (pobieranie danych), HEAD (pobranie nagłówka źródłowego bez  sekcji body)
  • URI: adres jakiegoś zasobu (strona, obraz, …) do pobrania/wysłania, adres względem hosta
  • HTTP version (standardowo 1.0, jednak możesz użyć innej aby uzyskać dostęp do innych elementów tej wersji)
  • header: ustawia pole wraz z kluczem i wartością
  • body strony (używane jedynie przy metodzie POST)

SFML automatycznie wypełnia pola obowiązkowe nagłówka, takie jak „host”, „Content-Length”, itp .Możesz wysyłać żądania (requesty) bez obaw, bo SFML dołoży starań aby były poprawne 😉 .

 

Odpowiedzi (responses)


Jeżeli udało nam się pomyślnie połączyć i wysłać żądanie do hosta to odpowiedź ze strony zostanie odebrana przez klasę sf::Http::Response, która posiada następujące elementy:

  • status, który w precyzyjny sposób pokazuje jak serwer zareagował na nasze żądanie (ok, redirected, not found, etc.)
  • wersję http
  • nagłówek: z kluczem i wartością
  • „body of response”

 

Przykład: wysyłanie wyniku do serwera online


Poniżej możesz zobaczyć w jaki sposób można wysłać zdobyty wynik przez gracza do serwera.

Oczywiście pokazany tutaj sposób jest bardzo prosty, nie posiada absolutnie żadnych zabezpieczeń i każdy może wysłać punkty. Zabezpieczeniem mógłby być np dodatkowy parametr w postaci hash kodu, który upewniałby nas że kod wysłano przez program. Jednak to wychodzi poza ten tutorial.

Na koniec jak mogłaby wyglądać strona PHP odbierająca nasze punkty:

Oryginalny artykuł