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.

../../_images/rest_api_scene.png

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)

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"])

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)

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.