Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

HTTP-Anfragen stellen

Warum HTTP verwenden?

HTTP-Anfragen sind nützlich für die Kommunikation mit Webservern und anderen Nicht-Godot-Programmen.

Im Vergleich zu den anderen Netzwerk-Features von Godot (wie z.B. High-level multiplayer) haben HTTP-Anfragen mehr Overhead und brauchen mehr Zeit, um in Gang zu kommen. Sie eignen sich daher nicht für die Kommunikation in Echtzeit und sind nicht gut geeignet, um viele kleine Aktualisierungen zu senden, wie es bei Multiplayer-Spielen üblich ist.

HTTP bietet jedoch Interoperabilität mit externen Web-Ressourcen und eignet sich hervorragend zum Senden und Empfangen großer Datenmengen, z.B. zum Übertragen von Dateien wie Spiel-Assets. Diese Assets können dann mit Laden und Speichern von Dateien zur Laufzeit geladen werden.

HTTP kann also für das Anmeldesystem Ihres Spiels, den Lobby-Browser, zum Abrufen von Informationen aus dem Internet oder zum Herunterladen von Spielinhalten nützlich sein.

Dieses Tutorial setzt eine gewisse Vertrautheit mit Godot und dem Godot-Editor voraus. Lesen Sie bei Bedarf die Seiten Einführung und Schritt für Schritt, insbesondere die Seiten Nodes und Szenen und Erstellen eines ersten Skripts.

HTTP-Anfragen in Godot

Der Node HTTPRequest ist der einfachste Weg, HTTP-Anfragen in Godot zu stellen. Er wird durch den einfacheren HTTPClient unterstützt, für den ein Tutorial verfügbar ist hier.

In diesem Beispiel wird eine HTTP-Anfrage an GitHub gestellt, um den Namen der neuesten Godot-Version abzurufen.

Warnung

Wenn Sie nach Android exportieren, stellen Sie sicher, dass Sie die Berechtigung Internet in der Android-Exportvorgabe aktivieren, bevor Sie das Projekt exportieren oder die Ein-Klick-Auslieferung verwenden. Andernfalls wird jede Art von Netzwerk-Kommunikation durch das Android-Betriebssystem blockiert.

Vorbereiten der Szene

Erstellen Sie eine neue leere Szene, fügen Sie einen Root Node hinzu und fügen Sie ihm ein Skript hinzu. Fügen Sie dann einen HTTPRequest Node als Child hinzu.

../../_images/rest_api_scene.webp

Skripting der Anfrage

Wenn das Projekt gestartet wird (also in _ready()), werden wir eine HTTP-Anfrage an Github senden, indem wir unseren Node HTTPRequest verwenden. Sobald die Anfrage abgeschlossen ist, werden wir die zurückgegebenen JSON-Daten parsen, nach dem Feld Name suchen und dieses auf der Konsole ausgeben.

extends Node

func _ready():
    $HTTPRequest.request_completed.connect(_on_request_completed)
    $HTTPRequest.request("https://api.github.com/repos/godotengine/godot/releases/latest")

func _on_request_completed(result, response_code, headers, body):
    var json = JSON.parse_string(body.get_string_from_utf8())
    print(json["name"])

Speichern Sie das Skript und die Szene, und führen Sie das Projekt aus. Der Name der neuesten Godot-Version auf Github sollte im Log erscheinen. Weitere Informationen zum Parsen von JSON finden Sie in den Klassenreferenzen für JSON.

Beachten Sie, dass Sie überprüfen wollen, ob das result gleich RESULT_SUCCESS ist und ob ein JSON-Parsing-Fehler aufgetreten ist, siehe die JSON-Klassenreferenz und HTTPRequest für weitere Informationen.

Sie müssen warten, bis eine Anfrage beendet ist, bevor Sie eine weitere senden können. Um mehrere Anfragen auf einmal zu stellen, benötigen Sie einen Node pro Anfrage. Eine übliche Strategie besteht darin, bei Bedarf HTTPRequest-Nodes zur Laufzeit zu erstellen und zu löschen.

Senden von Daten an den Server

Bisher haben wir uns darauf beschränkt, Daten von einem Server anzufordern. Was aber, wenn Sie Daten an den Server senden müssen? Hier ist eine übliche Vorgehensweise:

var json = JSON.stringify(data_to_send)
var headers = ["Content-Type: application/json"]
$HTTPRequest.request(url, headers, HTTPClient.METHOD_POST, json)

Benutzerdefinierte HTTP-Header einstellen

Natürlich können Sie auch eigene HTTP-Header setzen. Diese werden als String-Array angegeben, wobei jeder String einen Header im Format "header: value" enthält. Um zum Beispiel einen benutzerdefinierten User-Agent (den HTTP User-Agent-Header) zu setzen, könnten Sie folgendes verwenden:

$HTTPRequest.request("https://api.github.com/repos/godotengine/godot/releases/latest", ["User-Agent: YourCustomUserAgent"])

Warnung

Seien Sie sich darüber im Klaren, dass jemand Ihre veröffentlichte Anwendung analysieren und dekompilieren und so Zugang zu allen eingebetteten Autorisierungsinformationen wie Token, Benutzernamen oder Passwörtern erhalten könnte. Das bedeutet, dass es in der Regel keine gute Idee ist, Dinge wie Datenbank-Zugangsdaten in Ihr Spiel einzubetten. Vermeiden Sie es, wann immer möglich, für einen Angreifer nützliche Informationen bereitzustellen.