HTTPRequest.xml 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <class name="HTTPRequest" inherits="Node" version="3.3">
  3. <brief_description>
  4. A node with the ability to send HTTP(S) requests.
  5. </brief_description>
  6. <description>
  7. A node with the ability to send HTTP requests. Uses [HTTPClient] internally.
  8. Can be used to make HTTP requests, i.e. download or upload files or web content via HTTP.
  9. [b]Example of contacting a REST API and printing one of its returned fields:[/b]
  10. [codeblock]
  11. func _ready():
  12. # Create an HTTP request node and connect its completion signal.
  13. var http_request = HTTPRequest.new()
  14. add_child(http_request)
  15. http_request.connect("request_completed", self, "_http_request_completed")
  16. # Perform a GET request. The URL below returns JSON as of writing.
  17. var error = http_request.request("https://httpbin.org/get")
  18. if error != OK:
  19. push_error("An error occurred in the HTTP request.")
  20. # Perform a POST request. The URL below returns JSON as of writing.
  21. # Note: Don't make simultaneous requests using a single HTTPRequest node.
  22. # The snippet below is provided for reference only.
  23. var body = {"name": "Godette"}
  24. error = http_request.request("https://httpbin.org/post", [], true, HTTPClient.METHOD_POST, body)
  25. if error != OK:
  26. push_error("An error occurred in the HTTP request.")
  27. # Called when the HTTP request is completed.
  28. func _http_request_completed(result, response_code, headers, body):
  29. var response = parse_json(body.get_string_from_utf8())
  30. # Will print the user agent string used by the HTTPRequest node (as recognized by httpbin.org).
  31. print(response.headers["User-Agent"])
  32. [/codeblock]
  33. [b]Example of loading and displaying an image using HTTPRequest:[/b]
  34. [codeblock]
  35. func _ready():
  36. # Create an HTTP request node and connect its completion signal.
  37. var http_request = HTTPRequest.new()
  38. add_child(http_request)
  39. http_request.connect("request_completed", self, "_http_request_completed")
  40. # Perform the HTTP request. The URL below returns a PNG image as of writing.
  41. var error = http_request.request("https://via.placeholder.com/512")
  42. if error != OK:
  43. push_error("An error occurred in the HTTP request.")
  44. # Called when the HTTP request is completed.
  45. func _http_request_completed(result, response_code, headers, body):
  46. var image = Image.new()
  47. var error = image.load_png_from_buffer(body)
  48. if error != OK:
  49. push_error("Couldn't load the image.")
  50. var texture = ImageTexture.new()
  51. texture.create_from_image(image)
  52. # Display the image in a TextureRect node.
  53. var texture_rect = TextureRect.new()
  54. add_child(texture_rect)
  55. texture_rect.texture = texture
  56. [/codeblock]
  57. [b]Note:[/b] When performing HTTP requests from a project exported to HTML5, keep in mind the remote server may not allow requests from foreign origins due to [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/url]. If you host the server in question, you should modify its backend to allow requests from foreign origins by adding the [code]Access-Control-Allow-Origin: *[/code] HTTP header.
  58. [b]Note:[/b] SSL/TLS support is currently limited to TLS 1.0, TLS 1.1, and TLS 1.2. Attempting to connect to a TLS 1.3-only server will return an error.
  59. </description>
  60. <tutorials>
  61. <link>https://docs.godotengine.org/en/3.3/tutorials/networking/http_request_class.html</link>
  62. <link>https://docs.godotengine.org/en/3.3/tutorials/networking/ssl_certificates.html</link>
  63. </tutorials>
  64. <methods>
  65. <method name="cancel_request">
  66. <return type="void">
  67. </return>
  68. <description>
  69. Cancels the current request.
  70. </description>
  71. </method>
  72. <method name="get_body_size" qualifiers="const">
  73. <return type="int">
  74. </return>
  75. <description>
  76. Returns the response body length.
  77. [b]Note:[/b] Some Web servers may not send a body length. In this case, the value returned will be [code]-1[/code]. If using chunked transfer encoding, the body length will also be [code]-1[/code].
  78. </description>
  79. </method>
  80. <method name="get_downloaded_bytes" qualifiers="const">
  81. <return type="int">
  82. </return>
  83. <description>
  84. Returns the amount of bytes this HTTPRequest downloaded.
  85. </description>
  86. </method>
  87. <method name="get_http_client_status" qualifiers="const">
  88. <return type="int" enum="HTTPClient.Status">
  89. </return>
  90. <description>
  91. Returns the current status of the underlying [HTTPClient]. See [enum HTTPClient.Status].
  92. </description>
  93. </method>
  94. <method name="request">
  95. <return type="int" enum="Error">
  96. </return>
  97. <argument index="0" name="url" type="String">
  98. </argument>
  99. <argument index="1" name="custom_headers" type="PoolStringArray" default="PoolStringArray( )">
  100. </argument>
  101. <argument index="2" name="ssl_validate_domain" type="bool" default="true">
  102. </argument>
  103. <argument index="3" name="method" type="int" enum="HTTPClient.Method" default="0">
  104. </argument>
  105. <argument index="4" name="request_data" type="String" default="&quot;&quot;">
  106. </argument>
  107. <description>
  108. Creates request on the underlying [HTTPClient]. If there is no configuration errors, it tries to connect using [method HTTPClient.connect_to_host] and passes parameters onto [method HTTPClient.request].
  109. Returns [constant OK] if request is successfully created. (Does not imply that the server has responded), [constant ERR_UNCONFIGURED] if not in the tree, [constant ERR_BUSY] if still processing previous request, [constant ERR_INVALID_PARAMETER] if given string is not a valid URL format, or [constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot connect to host.
  110. [b]Note:[/b] The [code]request_data[/code] parameter is ignored if [code]method[/code] is [constant HTTPClient.METHOD_GET]. This is because GET methods can't contain request data. As a workaround, you can pass request data as a query string in the URL. See [method String.http_escape] for an example.
  111. </description>
  112. </method>
  113. </methods>
  114. <members>
  115. <member name="body_size_limit" type="int" setter="set_body_size_limit" getter="get_body_size_limit" default="-1">
  116. Maximum allowed size for response bodies.
  117. </member>
  118. <member name="download_chunk_size" type="int" setter="set_download_chunk_size" getter="get_download_chunk_size" default="65536">
  119. The size of the buffer used and maximum bytes to read per iteration. See [member HTTPClient.read_chunk_size].
  120. 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.
  121. </member>
  122. <member name="download_file" type="String" setter="set_download_file" getter="get_download_file" default="&quot;&quot;">
  123. The file to download into. Will output any received file into it.
  124. </member>
  125. <member name="max_redirects" type="int" setter="set_max_redirects" getter="get_max_redirects" default="8">
  126. Maximum number of allowed redirects.
  127. </member>
  128. <member name="timeout" type="int" setter="set_timeout" getter="get_timeout" default="0">
  129. </member>
  130. <member name="use_threads" type="bool" setter="set_use_threads" getter="is_using_threads" default="false">
  131. If [code]true[/code], multithreading is used to improve performance.
  132. </member>
  133. </members>
  134. <signals>
  135. <signal name="request_completed">
  136. <argument index="0" name="result" type="int">
  137. </argument>
  138. <argument index="1" name="response_code" type="int">
  139. </argument>
  140. <argument index="2" name="headers" type="PoolStringArray">
  141. </argument>
  142. <argument index="3" name="body" type="PoolByteArray">
  143. </argument>
  144. <description>
  145. Emitted when a request is completed.
  146. </description>
  147. </signal>
  148. </signals>
  149. <constants>
  150. <constant name="RESULT_SUCCESS" value="0" enum="Result">
  151. Request successful.
  152. </constant>
  153. <constant name="RESULT_CHUNKED_BODY_SIZE_MISMATCH" value="1" enum="Result">
  154. </constant>
  155. <constant name="RESULT_CANT_CONNECT" value="2" enum="Result">
  156. Request failed while connecting.
  157. </constant>
  158. <constant name="RESULT_CANT_RESOLVE" value="3" enum="Result">
  159. Request failed while resolving.
  160. </constant>
  161. <constant name="RESULT_CONNECTION_ERROR" value="4" enum="Result">
  162. Request failed due to connection (read/write) error.
  163. </constant>
  164. <constant name="RESULT_SSL_HANDSHAKE_ERROR" value="5" enum="Result">
  165. Request failed on SSL handshake.
  166. </constant>
  167. <constant name="RESULT_NO_RESPONSE" value="6" enum="Result">
  168. Request does not have a response (yet).
  169. </constant>
  170. <constant name="RESULT_BODY_SIZE_LIMIT_EXCEEDED" value="7" enum="Result">
  171. Request exceeded its maximum size limit, see [member body_size_limit].
  172. </constant>
  173. <constant name="RESULT_REQUEST_FAILED" value="8" enum="Result">
  174. Request failed (currently unused).
  175. </constant>
  176. <constant name="RESULT_DOWNLOAD_FILE_CANT_OPEN" value="9" enum="Result">
  177. HTTPRequest couldn't open the download file.
  178. </constant>
  179. <constant name="RESULT_DOWNLOAD_FILE_WRITE_ERROR" value="10" enum="Result">
  180. HTTPRequest couldn't write to the download file.
  181. </constant>
  182. <constant name="RESULT_REDIRECT_LIMIT_REACHED" value="11" enum="Result">
  183. Request reached its maximum redirect limit, see [member max_redirects].
  184. </constant>
  185. <constant name="RESULT_TIMEOUT" value="12" enum="Result">
  186. </constant>
  187. </constants>
  188. </class>