Inheritance #
- AudioServer
- CameraServer
- ClassDB
- DisplayServer
- EditorFileSystemDirectory
- EditorInterface
- EditorPaths
- EditorSelection
- EditorUndoRedoManager
- EditorVCSInterface
- Engine
- EngineDebugger
- FramebufferCacheRD
- GDExtensionManager
- Geometry2D
- Geometry3D
- IP
- Input
- InputMap
- JNISingleton
- JSONRPC
- JavaClassWrapper
- JavaScriptBridge
- MainLoop (1)
- Marshalls
- MovieWriter
- NativeMenu
- NavigationMeshGenerator
- NavigationServer2D
- NavigationServer3D
- Node (21)
- OS
- OpenXRExtensionWrapperExtension
- OpenXRInteractionProfileMetadata
- Performance
- PhysicsDirectBodyState2D (1)
- PhysicsDirectBodyState3D (1)
- PhysicsDirectSpaceState2D (1)
- PhysicsDirectSpaceState3D (1)
- PhysicsServer2D (1)
- PhysicsServer2DManager
- PhysicsServer3D (1)
- PhysicsServer3DManager
- PhysicsServer3DRendering
ServerHandler
- ProjectSettings
- RefCounted (121)
- RenderData (2)
- RenderSceneData (2)
- RenderingDevice
- RenderingServer
- ResourceLoader
- ResourceSaver
- ResourceUID
- ScriptLanguage (1)
- ShaderIncludeDB
- TextServerManager
- ThemeDB
- TileData
- Time
- TranslationServer
- TreeItem
- UndoRedo
- UniformSetCacheRD
- WorkerThreadPool
- XRServer
- XRVRS
- AnimationMixer (2)
- AudioStreamPlayer
- CanvasItem (2)
- CanvasLayer (1)
- EditorFileSystem
- EditorPlugin (1)
- EditorResourcePreview
- HTTPRequest
- InstancePlaceholder
- MissingNode
- MultiplayerSpawner
- MultiplayerSynchronizer
- NavigationAgent2D
- NavigationAgent3D
- Node3D (31)
- ResourcePreloader
- ShaderGlobalsOverride
- StatusIndicator
- Timer
- Viewport (2)
- WorldEnvironment
Table of contents
-
var accept_gzip: bool = true -
var body_size_limit: int = -1 -
var download_chunk_size: int = 65536 -
var download_file: String = "" -
var max_redirects: int = 8 -
var timeout: float = 0.0 -
var use_threads: bool = false -
func cancel_request() -> void -
const func get_body_size() -> int -
const func get_downloaded_bytes() -> int -
const func get_http_client_status() -> intHTTPClient.Status -
func request(request_data: String = "") -> intError -
func request_raw(request_data_raw: PackedByteArray = PackedByteArray()) -> intError -
func set_http_proxy(port: int) -> void -
func set_https_proxy(port: int) -> void -
func set_tls_options(client_options: TLSOptions) -> void -
const RESULT_SUCCESS = 0 enum Result -
const RESULT_CHUNKED_BODY_SIZE_MISMATCH = 1 enum Result -
const RESULT_CANT_CONNECT = 2 enum Result -
const RESULT_CANT_RESOLVE = 3 enum Result -
const RESULT_CONNECTION_ERROR = 4 enum Result -
const RESULT_TLS_HANDSHAKE_ERROR = 5 enum Result -
const RESULT_NO_RESPONSE = 6 enum Result -
const RESULT_BODY_SIZE_LIMIT_EXCEEDED = 7 enum Result -
const RESULT_BODY_DECOMPRESS_FAILED = 8 enum Result -
const RESULT_REQUEST_FAILED = 9 enum Result -
const RESULT_DOWNLOAD_FILE_CANT_OPEN = 10 enum Result -
const RESULT_DOWNLOAD_FILE_WRITE_ERROR = 11 enum Result -
const RESULT_REDIRECT_LIMIT_REACHED = 12 enum Result -
const RESULT_TIMEOUT = 13 enum Result -
enum Result -
signal request_completed(body: PackedByteArray)
HTTPRequest #
is_instantiable, Node, core, not_builtin_classes
A node with the ability to send HTTP(S) requests.
A node with the ability to send HTTP requests. Uses HTTPClient internally.
Can be used to make HTTP requests, i.e. download or upload files or web content via HTTP.
Warning: See the notes and warnings on HTTPClient for limitations, especially regarding TLS security.
Note: 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.
Example: Contact a REST API and print one of its returned fields:
GDScript
func _ready():
# Create an HTTP request node and connect its completion signal.
var http_request = HTTPRequest.new()
add_child(http_request)
http_request.request_completed.connect(self._http_request_completed)
# Perform a GET request. The URL below returns JSON as of writing.
var error = http_request.request("https://httpbin.org/get")
if error != OK:
push_error("An error occurred in the HTTP request.")
# Perform a POST request. The URL below returns JSON as of writing.
# Note: Don't make simultaneous requests using a single HTTPRequest node.
# The snippet below is provided for reference only.
var body = JSON.new().stringify({"name": "Godette"})
error = http_request.request("https://httpbin.org/post", [], HTTPClient.METHOD_POST, body)
if error != OK:
push_error("An error occurred in the HTTP request.")
# Called when the HTTP request is completed.
func _http_request_completed(result, response_code, headers, body):
var json = JSON.new()
json.parse(body.get_string_from_utf8())
var response = json.get_data()
# Will print the user agent string used by the HTTPRequest node (as recognized by httpbin.org).
print(response.headers["User-Agent"])C#
public override void _Ready()
{
// Create an HTTP request node and connect its completion signal.
var httpRequest = new HttpRequest();
AddChild(httpRequest);
httpRequest.RequestCompleted += HttpRequestCompleted;
// Perform a GET request. The URL below returns JSON as of writing.
Error error = httpRequest.Request("https://httpbin.org/get");
if (error != Error.Ok)
{
GD.PushError("An error occurred in the HTTP request.");
}
// Perform a POST request. The URL below returns JSON as of writing.
// Note: Don't make simultaneous requests using a single HTTPRequest node.
// The snippet below is provided for reference only.
string body = new Json().Stringify(new Godot.Collections.Dictionary
{
{ "name", "Godette" }
});
error = httpRequest.Request("https://httpbin.org/post", null, HttpClient.Method.Post, body);
if (error != Error.Ok)
{
GD.PushError("An error occurred in the HTTP request.");
}
}
// Called when the HTTP request is completed.
private void HttpRequestCompleted(long result, long responseCode, string[] headers, byte[] body)
{
var json = new Json();
json.Parse(body.GetStringFromUtf8());
var response = json.GetData().AsGodotDictionary();
// Will print the user agent string used by the HTTPRequest node (as recognized by httpbin.org).
GD.Print((response["headers"].AsGodotDictionary())["User-Agent"]);
}Example: Load an image using HTTPRequest and display it:
GDScript
func _ready():
# Create an HTTP request node and connect its completion signal.
var http_request = HTTPRequest.new()
add_child(http_request)
http_request.request_completed.connect(self._http_request_completed)
# Perform the HTTP request. The URL below returns a PNG image as of writing.
var error = http_request.request("https://placehold.co/512")
if error != OK:
push_error("An error occurred in the HTTP request.")
# Called when the HTTP request is completed.
func _http_request_completed(result, response_code, headers, body):
if result != HTTPRequest.RESULT_SUCCESS:
push_error("Image couldn't be downloaded. Try a different image.")
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.create_from_image(image)
# Display the image in a TextureRect node.
var texture_rect = TextureRect.new()
add_child(texture_rect)
texture_rect.texture = textureC#
public override void _Ready()
{
// Create an HTTP request node and connect its completion signal.
var httpRequest = new HttpRequest();
AddChild(httpRequest);
httpRequest.RequestCompleted += HttpRequestCompleted;
// Perform the HTTP request. The URL below returns a PNG image as of writing.
Error error = httpRequest.Request("https://placehold.co/512");
if (error != Error.Ok)
{
GD.PushError("An error occurred in the HTTP request.");
}
}
// Called when the HTTP request is completed.
private void HttpRequestCompleted(long result, long responseCode, string[] headers, byte[] body)
{
if (result != (long)HttpRequest.Result.Success)
{
GD.PushError("Image couldn't be downloaded. Try a different image.");
}
var image = new Image();
Error error = image.LoadPngFromBuffer(body);
if (error != Error.Ok)
{
GD.PushError("Couldn't load the image.");
}
var texture = ImageTexture.CreateFromImage(image);
// Display the image in a TextureRect node.
var textureRect = new TextureRect();
AddChild(textureRect);
textureRect.Texture = texture;
}Note: HTTPRequest nodes will automatically handle decompression of response bodies. A Accept-Encoding header will be automatically added to each of your requests, unless one is already specified. Any response with a Content-Encoding: gzip header will automatically be decompressed and delivered to you as uncompressed bytes.
Members #
var accept_gzip: bool = true#
If true, this header will be added to each request: Accept-Encoding: gzip, deflate telling servers that it's okay to compress response bodies.
Any Response body declaring a Content-Encoding of either gzip or deflate will then be automatically decompressed, and the uncompressed bytes will be delivered via request_completed.
If the user has specified their own Accept-Encoding header, then no header will be added regardless of accept_gzip.
If false no header will be added, and no decompression will be performed on response bodies. The raw bytes of the response body will be returned via request_completed.
var body_size_limit: int = -1#
Maximum allowed size for response bodies. If the response body is compressed, this will be used as the maximum allowed size for the decompressed body.
var download_chunk_size: int = 65536#
The size of the buffer used and maximum bytes to read per iteration. See HTTPClient.read_chunk_size.
Set this to a lower value (e.g. 4096 for 4 KiB) when downloading small files to decrease memory usage at the cost of download speeds.
var download_file: String = ""#
The file to download into. Will output any received file into it.
var max_redirects: int = 8#
Maximum number of allowed redirects.
var timeout: float = 0.0#
The duration to wait in seconds before a request times out. If timeout is set to 0.0 then the request will never time out. For simple requests, such as communication with a REST API, it is recommended that timeout is set to a value suitable for the server response time (e.g. between 1.0 and 10.0). This will help prevent unwanted timeouts caused by variation in server response times while still allowing the application to detect when a request has timed out. For larger requests such as file downloads it is suggested the timeout be set to 0.0, disabling the timeout functionality. This will help to prevent large transfers from failing due to exceeding the timeout value.
var use_threads: bool = false#
If true, multithreading is used to improve performance.
Methods #
func cancel_request() -> void#
Cancels the current request.
const func get_body_size() -> int#
Returns the response body length.
Note: Some Web servers may not send a body length. In this case, the value returned will be -1. If using chunked transfer encoding, the body length will also be -1.
const func get_downloaded_bytes() -> int#
Returns the number of bytes this HTTPRequest downloaded.
const func get_http_client_status() -> intHTTPClient.Status#
Returns the current status of the underlying HTTPClient. See HTTPClient.Status.
func request(request_data: String = "") -> intError#
Creates request on the underlying HTTPClient. If there is no configuration errors, it tries to connect using HTTPClient.connect_to_host and passes parameters onto HTTPClient.request.
Returns OK if request is successfully created. (Does not imply that the server has responded), ERR_UNCONFIGURED if not in the tree, ERR_BUSY if still processing previous request, ERR_INVALID_PARAMETER if given string is not a valid URL format, or ERR_CANT_CONNECT if not using thread and the HTTPClient cannot connect to host.
Note: When method is HTTPClient.METHOD_GET, the payload sent via request_data might be ignored by the server or even cause the server to reject the request (check RFC 7231 section 4.3.1 for more details). As a workaround, you can send data as a query string in the URL (see String.uri_encode for an example).
Note: It's recommended to use transport encryption (TLS) and to avoid sending sensitive information (such as login credentials) in HTTP GET URL parameters. Consider using HTTP POST requests or HTTP headers for such information instead.
func request_raw(request_data_raw: PackedByteArray = PackedByteArray()) -> intError#
Creates request on the underlying HTTPClient using a raw array of bytes for the request body. If there is no configuration errors, it tries to connect using HTTPClient.connect_to_host and passes parameters onto HTTPClient.request.
Returns OK if request is successfully created. (Does not imply that the server has responded), ERR_UNCONFIGURED if not in the tree, ERR_BUSY if still processing previous request, ERR_INVALID_PARAMETER if given string is not a valid URL format, or ERR_CANT_CONNECT if not using thread and the HTTPClient cannot connect to host.
func set_http_proxy(port: int) -> void#
Sets the proxy server for HTTP requests.
The proxy server is unset if host is empty or port is -1.
func set_https_proxy(port: int) -> void#
Sets the proxy server for HTTPS requests.
The proxy server is unset if host is empty or port is -1.
func set_tls_options(client_options: TLSOptions) -> void#
Sets the TLSOptions to be used when connecting to an HTTPS server. See TLSOptions.client.
Annotations #
Constants #
const RESULT_SUCCESS = 0 enum Result#
Request successful.
const RESULT_CHUNKED_BODY_SIZE_MISMATCH = 1 enum Result#
Request failed due to a mismatch between the expected and actual chunked body size during transfer. Possible causes include network errors, server misconfiguration, or issues with chunked encoding.
const RESULT_CANT_CONNECT = 2 enum Result#
Request failed while connecting.
const RESULT_CANT_RESOLVE = 3 enum Result#
Request failed while resolving.
const RESULT_CONNECTION_ERROR = 4 enum Result#
Request failed due to connection (read/write) error.
const RESULT_TLS_HANDSHAKE_ERROR = 5 enum Result#
Request failed on TLS handshake.
const RESULT_NO_RESPONSE = 6 enum Result#
Request does not have a response (yet).
const RESULT_BODY_SIZE_LIMIT_EXCEEDED = 7 enum Result#
Request exceeded its maximum size limit, see body_size_limit.
const RESULT_BODY_DECOMPRESS_FAILED = 8 enum Result#
Request failed due to an error while decompressing the response body. Possible causes include unsupported or incorrect compression format, corrupted data, or incomplete transfer.
const RESULT_REQUEST_FAILED = 9 enum Result#
Request failed (currently unused).
const RESULT_DOWNLOAD_FILE_CANT_OPEN = 10 enum Result#
HTTPRequest couldn't open the download file.
const RESULT_DOWNLOAD_FILE_WRITE_ERROR = 11 enum Result#
HTTPRequest couldn't write to the download file.
const RESULT_REDIRECT_LIMIT_REACHED = 12 enum Result#
Request reached its maximum redirect limit, see max_redirects.
const RESULT_TIMEOUT = 13 enum Result#
Request failed due to a timeout. If you expect requests to take a long time, try increasing the value of timeout or setting it to 0.0 to remove the timeout completely.
Constructors #
Enums #
Result#
enum Result {
RESULT_SUCCESS = 0,
RESULT_CHUNKED_BODY_SIZE_MISMATCH = 1,
RESULT_CANT_CONNECT = 2,
RESULT_CANT_RESOLVE = 3,
RESULT_CONNECTION_ERROR = 4,
RESULT_TLS_HANDSHAKE_ERROR = 5,
RESULT_NO_RESPONSE = 6,
RESULT_BODY_SIZE_LIMIT_EXCEEDED = 7,
RESULT_BODY_DECOMPRESS_FAILED = 8,
RESULT_REQUEST_FAILED = 9,
RESULT_DOWNLOAD_FILE_CANT_OPEN = 10,
RESULT_DOWNLOAD_FILE_WRITE_ERROR = 11,
RESULT_REDIRECT_LIMIT_REACHED = 12,
RESULT_TIMEOUT = 13,
} Operators #
Signals #
signal request_completed(body: PackedByteArray)#
Emitted when a request is completed.