发出HTTP请求

这个 HTTPRequest 节点是在godot中进行HTTP请求的最简单方法。它得到了更低级的支持 HTTPClient ,提供教程 here .

为了这个例子,我们将用一个按钮创建一个简单的用户界面,按下这个按钮将启动对指定URL的HTTP请求。

准备场景

创建一个新的空场景,添加一个CanvasLayer作为根节点,并向其添加一个脚本。然后向它添加两个子节点:一个按钮和一个httprequest节点。您需要将以下信号连接到canvaslayer脚本:

  • 按下按钮:当按下按钮时,我们将启动请求。

  • httpRequest.request_completed:当请求完成时,我们将获取作为参数的请求数据。

../../_images/rest_api_scene.png

脚本

下面是我们需要的所有代码。该URL指向一个在线API mocker;它返回一个预定义的JSON字符串,然后我们将解析该字符串以获取对数据的访问。

extends CanvasLayer

func _ready():
    pass

func _on_Button_pressed():
    $HTTPRequest.request("http://www.mocky.io/v2/5185415ba171ea3a00704eed")

func _on_HTTPRequest_request_completed( result, response_code, headers, body ):
    var json = JSON.parse(body.get_string_from_utf8())
    print(json.result)

你应该看看这个 (hello:world) 打印在控制台上;hello是一个键,world是一个值,两者都是字符串。

有关解析JSON的详细信息,请参见 JSONJSONParseResult .

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.

当然,还可以设置自定义HTTP头。它们以字符串数组的形式给出,每个字符串都包含一个格式为 "header: value" . 例如,要设置自定义用户代理(http user-agent header)您可以使用以下内容:

$HTTPRequest.request("http://www.mocky.io/v2/5185415ba171ea3a00704eed", ["user-agent: YourCustomUserAgent"])

请注意,对于SSL/TLS加密以及因此而起作用的HTTPS URL,您可能需要按照描述采取一些步骤。 here .

另外,当使用授权调用API时,请注意,有人可能会分析和反编译您发布的应用程序,从而可以访问任何嵌入的授权信息,如令牌、用户名或密码。这意味着在游戏中嵌入数据库访问凭证等内容通常不是一个好主意。尽可能避免向攻击者提供有用的信息。

向服务器发送数据

到目前为止,我们仅限于从服务器请求数据。但是如果需要将数据发送到服务器呢?这是一种常见的方法:

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)

请记住,在发送另一个请求之前,您必须等待请求完成。一次发出多个请求要求每个请求有一个节点。一种常见的策略是在运行时根据需要创建和删除httpRequest节点。