发出HTTP请求¶
这个 HTTPRequest 节点是在godot中进行HTTP请求的最简单方法。它得到了更低级的支持 HTTPClient ,提供教程 here .
为了这个例子,我们将用一个按钮创建一个简单的用户界面,按下这个按钮将启动对指定URL的HTTP请求。
准备场景¶
创建一个新的空场景,添加一个CanvasLayer作为根节点,并向其添加一个脚本。然后向它添加两个子节点:一个按钮和一个httprequest节点。您需要将以下信号连接到canvaslayer脚本:
按下按钮:当按下按钮时,我们将启动请求。
httpRequest.request_completed:当请求完成时,我们将获取作为参数的请求数据。
脚本¶
下面是我们需要的所有代码。该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的详细信息,请参见 JSON 和 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.
当然,还可以设置自定义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节点。