跳到主要内容

HTTPRequest

继承

Node

简要描述

能够发送HTTP(S)请求的节点。

描述

能够发送HTTP请求的节点。内部使用的是HTTPClient

可用于发出HTTP请求,即通过HTTP下载或上传文件或网页内容。

使用REST API并打印其返回字段之一的示例:

func _ready():
# 创建一个HTTP请求节点并连接其完成信号。
var http_request = HTTPRequest.new()
add_child(http_request)
http_request.connect("request_completed", self, "_http_request_completed")

# 执行HTTP请求。下面的URL请求会返回一些JSON文本。
var error = http_request.request("https://httpbin.org/get")
if error != OK:
push_error("An error occurred in the HTTP request.")


# 当HTTP请求完成后会被调用
func _http_request_completed(result, response_code, headers, body):
var response = parse_json(body.get_string_from_utf8())

# 将打印HTTPRequest节点使用的用户代理字符串(由httpbin.org识别)。
print(response.headers["User-Agent"])

使用HTTPRequest加载和显示图像的示例:

func _ready():
# 创建一个HTTP请求节点并连接其完成信号。
var http_request = HTTPRequest.new()
add_child(http_request)
http_request.connect("request_completed", self, "_http_request_completed")

# 执行HTTP请求。请求下面的URL会返回一张png图片
var error = http_request.request("https://via.placeholder.com/512")
if error != OK:
push_error("An error occurred in the HTTP request.")


# 当HTTP请求完成后会被调用。
func _http_request_completed(result, response_code, headers, body):
var image = Image.new()
var error = image.load_png_from_buffer(body)
if error != OK:
push_error("Couldn't load the image.")

var texture = ImageTexture.new()
texture.create_from_image(image)

# 在TextureRect节点中显示请求到的图片.
var texture_rect = TextureRect.new()
add_child(texture_rect)
texture_rect.texture = texture

成员

类型属性名默认值
intbody_size_limit-1
intdownload_chunk_size4096
Stringdownload_file""
intmax_redirects8
inttimeout0
booluse_threadsfalse

方法

返回值类型方法名称
voidcancel_request()
intget_body_size() const
intget_downloaded_bytes() const
intget_http_client_status() const
intrequest(url: String, custom_headers: PoolStringArray = PoolStringArray( ), ssl_validate_domain: bool = true, method: int = 0, request_data: String = "")

信号

  • **request_completed**

请求完成时发出。


枚举

enum Result:

  • **RESULT_SUCCESS = 0**

请求成功。

  • **RESULT_CHUNKED_BODY_SIZE_MISMATCH = 1**
  • **RESULT_CANT_CONNECT = 2**

连接时请求失败。

  • **RESULT_CANT_RESOLVE = 3**

请求解析失败。

  • **RESULT_CONNECTION_ERROR = 4**

由于连接(读/写)错误,请求失败。

  • **RESULT_SSL_HANDSHAKE_ERROR = 5**

SSL握手请求失败。

  • **RESULT_NO_RESPONSE = 6**

要求尚未回应。

  • **RESULT_BODY_SIZE_LIMIT_EXCEEDED = 7**

请求超出了其最大大小限制,请参阅body_size_limit

  • **RESULT_REQUEST_FAILED = 8**

请求失败(当前未使用)。

  • **RESULT_DOWNLOAD_FILE_CANT_OPEN = 9**

HTTPRequest无法打开下载文件。

  • **RESULT_DOWNLOAD_FILE_WRITE_ERROR = 10**

HTTPRequest无法写入下载文件。

  • **RESULT_REDIRECT_LIMIT_REACHED = 11**

请求达到其最大重定向限制,请参阅max_redirects

  • **RESULT_TIMEOUT = 12**

常量

成员说明

  • int body_size_limit
Default-1
setterset_body_size_limit(value)
getterget_body_size_limit
  • int download_chunk_size
Default4096
setterset_download_chunk_size(value)
getterget_download_chunk_size
  • String download_file
Default""
setterset_download_file(value)
getterget_download_file
  • int max_redirects
Default8
setterset_max_redirects(value)
getterget_max_redirects
  • int timeout
Default0
setterset_timeout(value)
getterget_timeout
  • bool use_threads
Defaultfalse
setterset_use_threads(value)
getteris_using_threads

方法说明

  • cancel_request cancel_request()

取消当前请求。


  • get_body_size get_body_size() const

返回响应主体的长度。

注意:某些Web服务器可能无法发送正文长度。 在这种情况下,返回的值将是-1。 如果使用分块传输编码,则正文长度也将为-1


  • get_downloaded_bytes get_downloaded_bytes() const

返回此HTTPRequest下载的字节数。


  • get_http_client_status get_http_client_status() const

返回基础HTTPClient的当前状态。参见HTTPClient.Status


  • request request(url: String, custom_headers: PoolStringArray = PoolStringArray( ), ssl_validate_domain: bool = true, method: int = 0, request_data: String = "")

在基础HTTPClient上创建请求。如果没有配置错误,它将尝试使用HTTPClient.connect_to_host进行连接,并将参数传递到HTTPClient.request上。

如果成功创建请求,则返回OK。 (不表示服务器已响应),如果不在树中则为ERR_UNCONFIGURED,如果仍在处理先前的请求,则为ERR_BUSY,如果给定的字符串不是有效的URL格式,则为ERR_INVALID_PARAMETER,如果不使用线程,并且HTTPClient无法连接到主机则为ERR_CANT_CONNECT