HTTPRequest Node

HTTPRequest w Godot 4 to węzeł umożliwiający wysyłanie żądań HTTP, takich jak GET, POST, PUT, DELETE i innych, do serwerów zewnętrznych oraz odbieranie odpowiedzi. HTTPRequest jest szczególnie przydatny do komunikacji z API, pobierania danych, przesyłania plików lub wysyłania danych na serwer.

Cechy HTTPRequest:

  • Obsługa różnych metod HTTP: HTTPRequest pozwala na wysyłanie żądań GET, POST, PUT, DELETE itp., co umożliwia komunikację z wieloma rodzajami API.
  • Asynchroniczność: HTTPRequest działa asynchronicznie, co oznacza, że odpowiedzi są odbierane po zakończeniu operacji, nie blokując głównego wątku gry.
  • Obsługa nagłówków i parametrów: Możesz dodawać nagłówki HTTP i przesyłać parametry w żądaniach, co jest przydatne przy pracy z API wymagającymi autoryzacji lub specyficznych danych.

Jak używać HTTPRequest w Godot 4

1. Dodanie HTTPRequest do sceny

  1. W drzewie scen kliknij „Dodaj węzeł”.
  2. Wyszukaj HTTPRequest i dodaj go do swojej sceny.
  3. Możesz używać HTTPRequest bezpośrednio, wywołując metody w skrypcie, aby wysyłać żądania HTTP.

2. Podstawowy przykład żądania GET

Poniższy skrypt przedstawia, jak wysłać proste żądanie GET do API, na przykład do pobrania danych.

extends Node

# Funkcja wysyłająca żądanie GET
func _ready():
    var http_request = $HTTPRequest  # Używamy węzła HTTPRequest
    var url = "https://jsonplaceholder.typicode.com/todos/1"  # Przykładowy URL API
    http_request.request(url)

# Obsługa odpowiedzi z serwera
func _on_HTTPRequest_request_completed(result, response_code, headers, body):
    if response_code == 200:
        var data = JSON.parse(body.get_string_from_utf8())
        if data.error == OK:
            print("Odpowiedź: ", data.result)
        else:
            print("Błąd w parsowaniu JSON")
    else:
        print("Błąd HTTP: ", response_code)

Wyjaśnienie kodu:

  • request(url): Wysyła żądanie GET do podanego URL.
  • _on_HTTPRequest_request_completed: Funkcja wywoływana po zakończeniu żądania, która odbiera wynik, kod odpowiedzi HTTP, nagłówki oraz dane odpowiedzi (w formie body).
  • Sprawdzenie odpowiedzi: Po odebraniu odpowiedzi sprawdzamy kod HTTP (200 oznacza sukces) i parsujemy dane JSON, jeśli odpowiedź jest poprawna.

3. Obsługa żądań POST

Żądania POST służą do przesyłania danych na serwer. Można dodać nagłówki, takie jak Content-Type, oraz przesyłać dane w formie JSON lub form-data.

Przykład żądania POST:

extends Node

func _ready():
    var http_request = $HTTPRequest
    var url = "https://jsonplaceholder.typicode.com/posts"

    # Dane do wysłania
    var data = {
        "title": "foo",
        "body": "bar",
        "userId": 1
    }
    var headers = ["Content-Type: application/json"]
    var json_data = JSON.print(data)  # Przekształć dane do formatu JSON

    # Wysłanie żądania POST
    http_request.request(url, headers, true, HTTPClient.METHOD_POST, json_data)

func _on_HTTPRequest_request_completed(result, response_code, headers, body):
    if response_code == 201:
        print("Dane zostały pomyślnie przesłane:", body.get_string_from_utf8())
    else:
        print("Błąd podczas przesyłania danych, kod odpowiedzi:", response_code)

Wyjaśnienie kodu:

  • Nagłówki: Dodajemy nagłówek Content-Type: application/json, informujący serwer, że dane są w formacie JSON.
  • Przesyłanie danych: Dane są serializowane do formatu JSON i przesyłane jako ciało żądania (parametr json_data).
  • Metoda POST: Używamy metody HTTPClient.METHOD_POST do wysłania danych na serwer.

4. Obsługa błędów i wyników HTTPRequest

_on_HTTPRequest_request_completed zwraca kilka parametrów, które można wykorzystać do obsługi wyników żądania:

  • result: Kod wyniku (może być przydatny do debugowania).
  • response_code: Kod odpowiedzi HTTP (np. 200 dla sukcesu, 404 dla braku zasobu).
  • headers: Lista nagłówków odpowiedzi.
  • body: Zawiera treść odpowiedzi (ciało).

5. Zastosowania HTTPRequest w grach i aplikacjach

  1. Ładowanie zasobów z serwera:
  • HTTPRequest może być używany do pobierania zasobów, takich jak tekstury, modele 3D czy dźwięki z serwera, co umożliwia dynamiczne ładowanie zawartości.
  1. Komunikacja z API:
  • Możesz korzystać z HTTPRequest do interakcji z różnymi API, na przykład do pobierania aktualnych wyników, przesyłania statystyk gry, zapisywania wyników w bazie danych itp.
  1. Integracja z bazami danych lub serwerami gier:
  • HTTPRequest może służyć do przesyłania danych z gry, np. wyniku gracza, na serwer lub bazę danych za pomocą API RESTful.
  1. Wysyłanie i odbieranie informacji o stanie gry:
  • Przykładowo, możesz używać HTTPRequest do synchronizacji gry z serwerem, przesyłania danych o stanie gry lub odbierania danych od innych graczy.

Dodatkowe ustawienia HTTPRequest

  • request(url, custom_headers, ssl_validate_domain, method, request_data): Główna metoda wysyłania żądań. Możesz kontrolować metodę HTTP, nagłówki, a także dane przesyłane w żądaniu.
  • timeout: Ustawia maksymalny czas oczekiwania na odpowiedź. Jeśli serwer nie odpowie w określonym czasie, żądanie zakończy się niepowodzeniem.
  • ssl_validate_domain: Gdy ustawione na true, HTTPRequest sprawdzi poprawność certyfikatu SSL (domyślnie true).

Przykład: Wysyłanie żądania GET z parametrami URL

Możesz łatwo dodać parametry URL do żądania GET, jeśli API wymaga parametrów zapytania.

extends Node

func _ready():
    var http_request = $HTTPRequest
    var url = "https://jsonplaceholder.typicode.com/comments?postId=1"
    http_request.request(url)

func _on_HTTPRequest_request_completed(result, response_code, headers, body):
    if response_code == 200:
        print("Otrzymane dane:", body.get_string_from_utf8())
    else:
        print("Błąd: kod odpowiedzi", response_code)

Podsumowanie:

HTTPRequest w Godot 4 to wszechstronne narzędzie do wysyłania żądań HTTP do serwerów zewnętrznych. Pozwala na łatwe przesyłanie danych, pobieranie zasobów, komunikację z API, a także obsługę odpowiedzi i błędów. Dzięki obsłudze różnych metod HTTP, HTTPRequest jest idealnym rozwiązaniem do tworzenia gier i aplikacji wymagających komunikacji sieciowej.


Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *