HTTP Anfragen erzeugen¶
The HTTPRequest node is the easiest way to make HTTP requests in Godot. It is backed by the more low-level HTTPClient, for which a tutorial is available here.
In diesem Beispiel erstellen wir eine einfache Benutzeroberfläche mit einer Schaltfläche, die beim Drücken die HTTP-Anforderung an die angegebene URL startet.
Warnung
When exporting to Android, make sure to enable the INTERNET
permission in the Android export preset before exporting the project or
using one-click deploy. Otherwise, network communication of any kind will be
blocked by Android.
Eine Szene vorbereiten¶
Erstellen Sie eine neue leere Szene, fügen Sie einen CanvasLayer als Wurzel-Node und ein Skript hinzu. Fügen Sie dann zwei untergeordnete Nodes hinzu: einen Button- und einen HTTPRequest-Mode. Sie müssen die folgenden Signale mit dem CanvasLayer-Skript verbinden:
Button.pressed: Wenn der Button gedrückt wird, starten wir die Anfrage.
HTTPRequest.request_completed: Wenn die Anforderung abgeschlossen ist, erhalten wir die angeforderten Daten als Argument.

Skripten¶
Below is all the code we need to make it work. The URL points to an online API mocker; it returns a pre-defined JSON string, which we will then parse to get access to the data.
extends CanvasLayer
func _ready():
$HTTPRequest.connect("request_completed", self, "_on_request_completed")
func _on_Button_pressed():
$HTTPRequest.request("http://www.mocky.io/v2/5185415ba171ea3a00704eed")
func _on_request_completed(result, response_code, headers, body):
var json = JSON.parse(body.get_string_from_utf8())
print(json.result)
class HTTPRequestDemo : CanvasLayer
{
public override void _Ready()
{
GetNode("HTTPRequest").Connect("request_completed", this, "OnRequestCompleted");
GetNode("Button").Connect("pressed", this, "OnButtonPressed");
}
public void OnButtonPressed()
{
HTTPRequest httpRequest = GetNode<HTTPRequest>("HTTPRequest");
httpRequest.Request("http://www.mocky.io/v2/5185415ba171ea3a00704eed");
}
public void OnRequestCompleted(int result, int response_code, string[] headers, byte[] body)
{
JSONParseResult json = JSON.Parse(Encoding.UTF8.GetString(body));
GD.Print(json.Result);
}
}
With this, you should see (hello:world)
printed on the console; hello being a key, and world being a value, both of them strings.
For more information on parsing JSON, see the class references for JSON and JSONParseResult.
Note that you may want to check whether the result
equals RESULT_SUCCESS
and whether a JSON parsing error occurred, see the JSON class reference and HTTPRequest for more.
Of course, you can also set custom HTTP headers. These are given as a string array, with each string containing a header in the format "header: value"
.
For example, to set a custom user agent (the HTTP user-agent
header) you could use the following:
$HTTPRequest.request("http://www.mocky.io/v2/5185415ba171ea3a00704eed", ["user-agent: YourCustomUserAgent"])
HTTPRequest httpRequest = GetNode<HTTPRequest>("HTTPRequest");
httpRequest.Request("http://www.mocky.io/v2/5185415ba171ea3a00704eed", new string[] { "user-agent: YourCustomUserAgent" });
Beachten Sie, dass Sie möglicherweise einige Schritte wie hier beschrieben ausführen müssen, damit die SSL/TLS-Verschlüsselung und damit die HTTPS-URLs funktionieren.
Beachten Sie beim Aufrufen von APIs mit Autorisierung, dass möglicherweise jemand Ihre freigegebene Anwendung analysiert und dekompiliert und somit Zugriff auf eingebettete Autorisierungsinformationen wie Token, Benutzernamen oder Kennwörter erhält. Das bedeutet, dass es normalerweise keine gute Idee ist, Dinge wie Anmeldeinformationen für den Datenbankzugriff in Ihr Spiel einzubetten. Vermeiden Sie nach Möglichkeit nützliche Informationen für einen Angreifer bereitzustellen.
Daten zum Server senden¶
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:
func _make_post_request(url, data_to_send, use_ssl):
# Convert data to json string:
var query = JSON.print(data_to_send)
# Add 'Content-Type' header:
var headers = ["Content-Type: application/json"]
$HTTPRequest.request(url, headers, use_ssl, HTTPClient.METHOD_POST, query)
public void MakePostRequest(string url, object data_to_send, bool use_ssl)
{
string query = JSON.Print(data_to_send);
HTTPRequest httpRequest = GetNode<HTTPRequest>("HTTPRequest");
string[] headers = new string[] { "Content-Type: application/json" };
httpRequest.Request(url, headers, use_ssl, HTTPClient.Method.Post, query);
}
Denken Sie daran, dass Sie warten müssen, bis eine Anfrage abgeschlossen ist, bevor Sie eine weitere senden. Um mehrere Anfragen gleichzeitig zu stellen, müssen Sie einen Node pro Anfrage haben. Eine gängige Strategie besteht darin, HTTPRequest-Nodes zur Laufzeit nach Bedarf zu erstellen und zu löschen.