:github_url: hide .. Generated automatically by doc/tools/make_rst.py in Godot's source tree. .. DO NOT EDIT THIS FILE, but the HTTPRequest.xml source instead. .. The source is found in doc/classes or modules//doc_classes. .. _class_HTTPRequest: HTTPRequest =========== **Inherits:** :ref:`Node` **<** :ref:`Object` A node with the ability to send HTTP(S) requests. Description ----------- A node with the ability to send HTTP requests. Uses :ref:`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 :ref:`HTTPClient` for limitations, especially regarding SSL security. **Example of contacting a REST API and printing one of its returned fields:** :: func _ready(): # Create an HTTP request node and connect its completion signal. var http_request = HTTPRequest.new() add_child(http_request) http_request.connect("request_completed", 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 = {"name": "Godette"} error = http_request.request("https://httpbin.org/post", [], true, 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 response = parse_json(body.get_string_from_utf8()) # Will print the user agent string used by the HTTPRequest node (as recognized by httpbin.org). print(response.headers["User-Agent"]) **Example of loading and displaying an image using HTTPRequest:** :: func _ready(): # Create an HTTP request node and connect its completion signal. var http_request = HTTPRequest.new() add_child(http_request) http_request.connect("request_completed", self, "_http_request_completed") # Perform the HTTP request. The URL below returns a PNG image as of writing. var error = http_request.request("https://via.placeholder.com/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): 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) # Display the image in a TextureRect node. var texture_rect = TextureRect.new() add_child(texture_rect) texture_rect.texture = texture Tutorials --------- - :doc:`../tutorials/networking/http_request_class` - :doc:`../tutorials/networking/ssl_certificates` Properties ---------- +-----------------------------+----------------------------------------------------------------------------+-----------+ | :ref:`int` | :ref:`body_size_limit` | ``-1`` | +-----------------------------+----------------------------------------------------------------------------+-----------+ | :ref:`int` | :ref:`download_chunk_size` | ``65536`` | +-----------------------------+----------------------------------------------------------------------------+-----------+ | :ref:`String` | :ref:`download_file` | ``""`` | +-----------------------------+----------------------------------------------------------------------------+-----------+ | :ref:`int` | :ref:`max_redirects` | ``8`` | +-----------------------------+----------------------------------------------------------------------------+-----------+ | :ref:`int` | :ref:`timeout` | ``0`` | +-----------------------------+----------------------------------------------------------------------------+-----------+ | :ref:`bool` | :ref:`use_threads` | ``false`` | +-----------------------------+----------------------------------------------------------------------------+-----------+ Methods ------- +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`cancel_request` **(** **)** | +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_body_size` **(** **)** |const| | +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_downloaded_bytes` **(** **)** |const| | +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Status` | :ref:`get_http_client_status` **(** **)** |const| | +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`request` **(** :ref:`String` url, :ref:`PoolStringArray` custom_headers=PoolStringArray( ), :ref:`bool` ssl_validate_domain=true, :ref:`Method` method=0, :ref:`String` request_data="" **)** | +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`request_raw` **(** :ref:`String` url, :ref:`PoolStringArray` custom_headers=PoolStringArray( ), :ref:`bool` ssl_validate_domain=true, :ref:`Method` method=0, :ref:`PoolByteArray` request_data_raw=PoolByteArray( ) **)** | +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Signals ------- .. _class_HTTPRequest_signal_request_completed: - **request_completed** **(** :ref:`int` result, :ref:`int` response_code, :ref:`PoolStringArray` headers, :ref:`PoolByteArray` body **)** Emitted when a request is completed. Enumerations ------------ .. _enum_HTTPRequest_Result: .. _class_HTTPRequest_constant_RESULT_SUCCESS: .. _class_HTTPRequest_constant_RESULT_CHUNKED_BODY_SIZE_MISMATCH: .. _class_HTTPRequest_constant_RESULT_CANT_CONNECT: .. _class_HTTPRequest_constant_RESULT_CANT_RESOLVE: .. _class_HTTPRequest_constant_RESULT_CONNECTION_ERROR: .. _class_HTTPRequest_constant_RESULT_SSL_HANDSHAKE_ERROR: .. _class_HTTPRequest_constant_RESULT_NO_RESPONSE: .. _class_HTTPRequest_constant_RESULT_BODY_SIZE_LIMIT_EXCEEDED: .. _class_HTTPRequest_constant_RESULT_REQUEST_FAILED: .. _class_HTTPRequest_constant_RESULT_DOWNLOAD_FILE_CANT_OPEN: .. _class_HTTPRequest_constant_RESULT_DOWNLOAD_FILE_WRITE_ERROR: .. _class_HTTPRequest_constant_RESULT_REDIRECT_LIMIT_REACHED: .. _class_HTTPRequest_constant_RESULT_TIMEOUT: enum **Result**: - **RESULT_SUCCESS** = **0** --- Request successful. - **RESULT_CHUNKED_BODY_SIZE_MISMATCH** = **1** - **RESULT_CANT_CONNECT** = **2** --- Request failed while connecting. - **RESULT_CANT_RESOLVE** = **3** --- Request failed while resolving. - **RESULT_CONNECTION_ERROR** = **4** --- Request failed due to connection (read/write) error. - **RESULT_SSL_HANDSHAKE_ERROR** = **5** --- Request failed on SSL handshake. - **RESULT_NO_RESPONSE** = **6** --- Request does not have a response (yet). - **RESULT_BODY_SIZE_LIMIT_EXCEEDED** = **7** --- Request exceeded its maximum size limit, see :ref:`body_size_limit`. - **RESULT_REQUEST_FAILED** = **8** --- Request failed (currently unused). - **RESULT_DOWNLOAD_FILE_CANT_OPEN** = **9** --- HTTPRequest couldn't open the download file. - **RESULT_DOWNLOAD_FILE_WRITE_ERROR** = **10** --- HTTPRequest couldn't write to the download file. - **RESULT_REDIRECT_LIMIT_REACHED** = **11** --- Request reached its maximum redirect limit, see :ref:`max_redirects`. - **RESULT_TIMEOUT** = **12** Property Descriptions --------------------- .. _class_HTTPRequest_property_body_size_limit: - :ref:`int` **body_size_limit** +-----------+----------------------------+ | *Default* | ``-1`` | +-----------+----------------------------+ | *Setter* | set_body_size_limit(value) | +-----------+----------------------------+ | *Getter* | get_body_size_limit() | +-----------+----------------------------+ Maximum allowed size for response bodies. ---- .. _class_HTTPRequest_property_download_chunk_size: - :ref:`int` **download_chunk_size** +-----------+--------------------------------+ | *Default* | ``65536`` | +-----------+--------------------------------+ | *Setter* | set_download_chunk_size(value) | +-----------+--------------------------------+ | *Getter* | get_download_chunk_size() | +-----------+--------------------------------+ The size of the buffer used and maximum bytes to read per iteration. See :ref:`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. ---- .. _class_HTTPRequest_property_download_file: - :ref:`String` **download_file** +-----------+--------------------------+ | *Default* | ``""`` | +-----------+--------------------------+ | *Setter* | set_download_file(value) | +-----------+--------------------------+ | *Getter* | get_download_file() | +-----------+--------------------------+ The file to download into. Will output any received file into it. ---- .. _class_HTTPRequest_property_max_redirects: - :ref:`int` **max_redirects** +-----------+--------------------------+ | *Default* | ``8`` | +-----------+--------------------------+ | *Setter* | set_max_redirects(value) | +-----------+--------------------------+ | *Getter* | get_max_redirects() | +-----------+--------------------------+ Maximum number of allowed redirects. ---- .. _class_HTTPRequest_property_timeout: - :ref:`int` **timeout** +-----------+--------------------+ | *Default* | ``0`` | +-----------+--------------------+ | *Setter* | set_timeout(value) | +-----------+--------------------+ | *Getter* | get_timeout() | +-----------+--------------------+ ---- .. _class_HTTPRequest_property_use_threads: - :ref:`bool` **use_threads** +-----------+------------------------+ | *Default* | ``false`` | +-----------+------------------------+ | *Setter* | set_use_threads(value) | +-----------+------------------------+ | *Getter* | is_using_threads() | +-----------+------------------------+ If ``true``, multithreading is used to improve performance. Method Descriptions ------------------- .. _class_HTTPRequest_method_cancel_request: - void **cancel_request** **(** **)** Cancels the current request. ---- .. _class_HTTPRequest_method_get_body_size: - :ref:`int` **get_body_size** **(** **)** |const| 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``. ---- .. _class_HTTPRequest_method_get_downloaded_bytes: - :ref:`int` **get_downloaded_bytes** **(** **)** |const| Returns the amount of bytes this HTTPRequest downloaded. ---- .. _class_HTTPRequest_method_get_http_client_status: - :ref:`Status` **get_http_client_status** **(** **)** |const| Returns the current status of the underlying :ref:`HTTPClient`. See :ref:`Status`. ---- .. _class_HTTPRequest_method_request: - :ref:`Error` **request** **(** :ref:`String` url, :ref:`PoolStringArray` custom_headers=PoolStringArray( ), :ref:`bool` ssl_validate_domain=true, :ref:`Method` method=0, :ref:`String` request_data="" **)** Creates request on the underlying :ref:`HTTPClient`. If there is no configuration errors, it tries to connect using :ref:`HTTPClient.connect_to_host` and passes parameters onto :ref:`HTTPClient.request`. Returns :ref:`@GlobalScope.OK` if request is successfully created. (Does not imply that the server has responded), :ref:`@GlobalScope.ERR_UNCONFIGURED` if not in the tree, :ref:`@GlobalScope.ERR_BUSY` if still processing previous request, :ref:`@GlobalScope.ERR_INVALID_PARAMETER` if given string is not a valid URL format, or :ref:`@GlobalScope.ERR_CANT_CONNECT` if not using thread and the :ref:`HTTPClient` cannot connect to host. **Note:** When ``method`` is :ref:`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 :ref:`String.http_escape` for an example. ---- .. _class_HTTPRequest_method_request_raw: - :ref:`Error` **request_raw** **(** :ref:`String` url, :ref:`PoolStringArray` custom_headers=PoolStringArray( ), :ref:`bool` ssl_validate_domain=true, :ref:`Method` method=0, :ref:`PoolByteArray` request_data_raw=PoolByteArray( ) **)** Creates request on the underlying :ref:`HTTPClient` using a raw array of bytes for the request body. If there is no configuration errors, it tries to connect using :ref:`HTTPClient.connect_to_host` and passes parameters onto :ref:`HTTPClient.request`. Returns :ref:`@GlobalScope.OK` if request is successfully created. (Does not imply that the server has responded), :ref:`@GlobalScope.ERR_UNCONFIGURED` if not in the tree, :ref:`@GlobalScope.ERR_BUSY` if still processing previous request, :ref:`@GlobalScope.ERR_INVALID_PARAMETER` if given string is not a valid URL format, or :ref:`@GlobalScope.ERR_CANT_CONNECT` if not using thread and the :ref:`HTTPClient` cannot connect to host. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`