HTTPRequest Node

in polish •  last month 

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.


Published using WordPress Blurt Publisher from https://godot.com.pl.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE BLURT!