class_httprequest.rst 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. :github_url: hide
  2. .. Generated automatically by doc/tools/make_rst.py in Godot's source tree.
  3. .. DO NOT EDIT THIS FILE, but the HTTPRequest.xml source instead.
  4. .. The source is found in doc/classes or modules/<name>/doc_classes.
  5. .. _class_HTTPRequest:
  6. HTTPRequest
  7. ===========
  8. **Inherits:** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
  9. A node with the ability to send HTTP(S) requests.
  10. Description
  11. -----------
  12. A node with the ability to send HTTP requests. Uses :ref:`HTTPClient<class_HTTPClient>` internally.
  13. Can be used to make HTTP requests, i.e. download or upload files or web content via HTTP.
  14. \ **Warning:** See the notes and warnings on :ref:`HTTPClient<class_HTTPClient>` for limitations, especially regarding SSL security.
  15. \ **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.
  16. \ **Example of contacting a REST API and printing one of its returned fields:**\
  17. .. tabs::
  18. .. code-tab:: gdscript
  19. func _ready():
  20. # Create an HTTP request node and connect its completion signal.
  21. var http_request = HTTPRequest.new()
  22. add_child(http_request)
  23. http_request.connect("request_completed", self, "_http_request_completed")
  24. # Perform a GET request. The URL below returns JSON as of writing.
  25. var error = http_request.request("https://httpbin.org/get")
  26. if error != OK:
  27. push_error("An error occurred in the HTTP request.")
  28. # Perform a POST request. The URL below returns JSON as of writing.
  29. # Note: Don't make simultaneous requests using a single HTTPRequest node.
  30. # The snippet below is provided for reference only.
  31. var body = {"name": "Godette"}
  32. error = http_request.request("https://httpbin.org/post", [], true, HTTPClient.METHOD_POST, body)
  33. if error != OK:
  34. push_error("An error occurred in the HTTP request.")
  35. # Called when the HTTP request is completed.
  36. func _http_request_completed(result, response_code, headers, body):
  37. var response = parse_json(body.get_string_from_utf8())
  38. # Will print the user agent string used by the HTTPRequest node (as recognized by httpbin.org).
  39. print(response.headers["User-Agent"])
  40. .. code-tab:: csharp
  41. public override void _Ready()
  42. {
  43. // Create an HTTP request node and connect its completion signal.
  44. var httpRequest = new HTTPRequest();
  45. AddChild(httpRequest);
  46. httpRequest.Connect("request_completed", this, nameof(HttpRequestCompleted));
  47. // Perform a GET request. The URL below returns JSON as of writing.
  48. Error error = httpRequest.Request("https://httpbin.org/get");
  49. if (error != Error.Ok)
  50. {
  51. GD.PushError("An error occurred in the HTTP request.");
  52. }
  53. // Perform a POST request. The URL below returns JSON as of writing.
  54. // Note: Don't make simultaneous requests using a single HTTPRequest node.
  55. // The snippet below is provided for reference only.
  56. string[] body = { "name", "Godette" };
  57. // GDScript to_json is non existent, so we use JSON.Print() here.
  58. error = httpRequest.Request("https://httpbin.org/post", null, true, HTTPClient.Method.Post, JSON.Print(body));
  59. if (error != Error.Ok)
  60. {
  61. GD.PushError("An error occurred in the HTTP request.");
  62. }
  63. }
  64. // Called when the HTTP request is completed.
  65. private void HttpRequestCompleted(int result, int response_code, string[] headers, byte[] body)
  66. {
  67. // GDScript parse_json is non existent so we have to use JSON.parse, which has a slightly different syntax.
  68. var response = JSON.Parse(body.GetStringFromUTF8()).Result as Godot.Collections.Dictionary;
  69. // Will print the user agent string used by the HTTPRequest node (as recognized by httpbin.org).
  70. GD.Print((response["headers"] as Godot.Collections.Dictionary)["User-Agent"]);
  71. }
  72. \ **Example of loading and displaying an image using HTTPRequest:**\
  73. .. tabs::
  74. .. code-tab:: gdscript
  75. func _ready():
  76. # Create an HTTP request node and connect its completion signal.
  77. var http_request = HTTPRequest.new()
  78. add_child(http_request)
  79. http_request.connect("request_completed", self, "_http_request_completed")
  80. # Perform the HTTP request. The URL below returns a PNG image as of writing.
  81. var error = http_request.request("https://via.placeholder.com/512")
  82. if error != OK:
  83. push_error("An error occurred in the HTTP request.")
  84. # Called when the HTTP request is completed.
  85. func _http_request_completed(result, response_code, headers, body):
  86. if result != HTTPRequest.RESULT_SUCCESS:
  87. push_error("Image couldn't be downloaded. Try a different image.")
  88. var image = Image.new()
  89. var error = image.load_png_from_buffer(body)
  90. if error != OK:
  91. push_error("Couldn't load the image.")
  92. var texture = ImageTexture.new()
  93. texture.create_from_image(image)
  94. # Display the image in a TextureRect node.
  95. var texture_rect = TextureRect.new()
  96. add_child(texture_rect)
  97. texture_rect.texture = texture
  98. .. code-tab:: csharp
  99. public override void _Ready()
  100. {
  101. // Create an HTTP request node and connect its completion signal.
  102. var httpRequest = new HTTPRequest();
  103. AddChild(httpRequest);
  104. httpRequest.Connect("request_completed", this, nameof(HttpRequestCompleted));
  105. // Perform the HTTP request. The URL below returns a PNG image as of writing.
  106. Error error = httpRequest.Request("https://via.placeholder.com/512");
  107. if (error != Error.Ok)
  108. {
  109. GD.PushError("An error occurred in the HTTP request.");
  110. }
  111. }
  112. // Called when the HTTP request is completed.
  113. private void HttpRequestCompleted(int result, int response_code, string[] headers, byte[] body)
  114. {
  115. if (result != (int)HTTPRequest.Result.Success)
  116. {
  117. GD.PushError("Image couldn't be downloaded. Try a different image.");
  118. }
  119. var image = new Image();
  120. Error error = image.LoadPngFromBuffer(body);
  121. if (error != Error.Ok)
  122. {
  123. GD.PushError("Couldn't load the image.");
  124. }
  125. var texture = new ImageTexture();
  126. texture.CreateFromImage(image);
  127. // Display the image in a TextureRect node.
  128. var textureRect = new TextureRect();
  129. AddChild(textureRect);
  130. textureRect.Texture = texture;
  131. }
  132. \ **Gzipped response bodies**: HTTPRequest 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.
  133. Tutorials
  134. ---------
  135. - :doc:`Making HTTP requests <../tutorials/networking/http_request_class>`
  136. - :doc:`SSL certificates <../tutorials/networking/ssl_certificates>`
  137. Properties
  138. ----------
  139. +-----------------------------+----------------------------------------------------------------------------+-----------+
  140. | :ref:`bool<class_bool>` | :ref:`accept_gzip<class_HTTPRequest_property_accept_gzip>` | ``true`` |
  141. +-----------------------------+----------------------------------------------------------------------------+-----------+
  142. | :ref:`int<class_int>` | :ref:`body_size_limit<class_HTTPRequest_property_body_size_limit>` | ``-1`` |
  143. +-----------------------------+----------------------------------------------------------------------------+-----------+
  144. | :ref:`int<class_int>` | :ref:`download_chunk_size<class_HTTPRequest_property_download_chunk_size>` | ``65536`` |
  145. +-----------------------------+----------------------------------------------------------------------------+-----------+
  146. | :ref:`String<class_String>` | :ref:`download_file<class_HTTPRequest_property_download_file>` | ``""`` |
  147. +-----------------------------+----------------------------------------------------------------------------+-----------+
  148. | :ref:`int<class_int>` | :ref:`max_redirects<class_HTTPRequest_property_max_redirects>` | ``8`` |
  149. +-----------------------------+----------------------------------------------------------------------------+-----------+
  150. | :ref:`int<class_int>` | :ref:`timeout<class_HTTPRequest_property_timeout>` | ``0`` |
  151. +-----------------------------+----------------------------------------------------------------------------+-----------+
  152. | :ref:`bool<class_bool>` | :ref:`use_threads<class_HTTPRequest_property_use_threads>` | ``false`` |
  153. +-----------------------------+----------------------------------------------------------------------------+-----------+
  154. Methods
  155. -------
  156. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  157. | void | :ref:`cancel_request<class_HTTPRequest_method_cancel_request>` **(** **)** |
  158. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  159. | :ref:`int<class_int>` | :ref:`get_body_size<class_HTTPRequest_method_get_body_size>` **(** **)** |const| |
  160. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  161. | :ref:`int<class_int>` | :ref:`get_downloaded_bytes<class_HTTPRequest_method_get_downloaded_bytes>` **(** **)** |const| |
  162. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  163. | :ref:`Status<enum_HTTPClient_Status>` | :ref:`get_http_client_status<class_HTTPRequest_method_get_http_client_status>` **(** **)** |const| |
  164. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  165. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`request<class_HTTPRequest_method_request>` **(** :ref:`String<class_String>` url, :ref:`PackedStringArray<class_PackedStringArray>` custom_headers=PackedStringArray(), :ref:`bool<class_bool>` ssl_validate_domain=true, :ref:`Method<enum_HTTPClient_Method>` method=0, :ref:`String<class_String>` request_data="" **)** |
  166. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  167. | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`request_raw<class_HTTPRequest_method_request_raw>` **(** :ref:`String<class_String>` url, :ref:`PackedStringArray<class_PackedStringArray>` custom_headers=PackedStringArray(), :ref:`bool<class_bool>` ssl_validate_domain=true, :ref:`Method<enum_HTTPClient_Method>` method=0, :ref:`PackedByteArray<class_PackedByteArray>` request_data_raw=PackedByteArray() **)** |
  168. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  169. | void | :ref:`set_http_proxy<class_HTTPRequest_method_set_http_proxy>` **(** :ref:`String<class_String>` host, :ref:`int<class_int>` port **)** |
  170. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  171. | void | :ref:`set_https_proxy<class_HTTPRequest_method_set_https_proxy>` **(** :ref:`String<class_String>` host, :ref:`int<class_int>` port **)** |
  172. +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  173. Signals
  174. -------
  175. .. _class_HTTPRequest_signal_request_completed:
  176. - **request_completed** **(** :ref:`int<class_int>` result, :ref:`int<class_int>` response_code, :ref:`PackedStringArray<class_PackedStringArray>` headers, :ref:`PackedByteArray<class_PackedByteArray>` body **)**
  177. Emitted when a request is completed.
  178. Enumerations
  179. ------------
  180. .. _enum_HTTPRequest_Result:
  181. .. _class_HTTPRequest_constant_RESULT_SUCCESS:
  182. .. _class_HTTPRequest_constant_RESULT_CHUNKED_BODY_SIZE_MISMATCH:
  183. .. _class_HTTPRequest_constant_RESULT_CANT_CONNECT:
  184. .. _class_HTTPRequest_constant_RESULT_CANT_RESOLVE:
  185. .. _class_HTTPRequest_constant_RESULT_CONNECTION_ERROR:
  186. .. _class_HTTPRequest_constant_RESULT_SSL_HANDSHAKE_ERROR:
  187. .. _class_HTTPRequest_constant_RESULT_NO_RESPONSE:
  188. .. _class_HTTPRequest_constant_RESULT_BODY_SIZE_LIMIT_EXCEEDED:
  189. .. _class_HTTPRequest_constant_RESULT_BODY_DECOMPRESS_FAILED:
  190. .. _class_HTTPRequest_constant_RESULT_REQUEST_FAILED:
  191. .. _class_HTTPRequest_constant_RESULT_DOWNLOAD_FILE_CANT_OPEN:
  192. .. _class_HTTPRequest_constant_RESULT_DOWNLOAD_FILE_WRITE_ERROR:
  193. .. _class_HTTPRequest_constant_RESULT_REDIRECT_LIMIT_REACHED:
  194. .. _class_HTTPRequest_constant_RESULT_TIMEOUT:
  195. enum **Result**:
  196. - **RESULT_SUCCESS** = **0** --- Request successful.
  197. - **RESULT_CHUNKED_BODY_SIZE_MISMATCH** = **1**
  198. - **RESULT_CANT_CONNECT** = **2** --- Request failed while connecting.
  199. - **RESULT_CANT_RESOLVE** = **3** --- Request failed while resolving.
  200. - **RESULT_CONNECTION_ERROR** = **4** --- Request failed due to connection (read/write) error.
  201. - **RESULT_SSL_HANDSHAKE_ERROR** = **5** --- Request failed on SSL handshake.
  202. - **RESULT_NO_RESPONSE** = **6** --- Request does not have a response (yet).
  203. - **RESULT_BODY_SIZE_LIMIT_EXCEEDED** = **7** --- Request exceeded its maximum size limit, see :ref:`body_size_limit<class_HTTPRequest_property_body_size_limit>`.
  204. - **RESULT_BODY_DECOMPRESS_FAILED** = **8**
  205. - **RESULT_REQUEST_FAILED** = **9** --- Request failed (currently unused).
  206. - **RESULT_DOWNLOAD_FILE_CANT_OPEN** = **10** --- HTTPRequest couldn't open the download file.
  207. - **RESULT_DOWNLOAD_FILE_WRITE_ERROR** = **11** --- HTTPRequest couldn't write to the download file.
  208. - **RESULT_REDIRECT_LIMIT_REACHED** = **12** --- Request reached its maximum redirect limit, see :ref:`max_redirects<class_HTTPRequest_property_max_redirects>`.
  209. - **RESULT_TIMEOUT** = **13**
  210. Property Descriptions
  211. ---------------------
  212. .. _class_HTTPRequest_property_accept_gzip:
  213. - :ref:`bool<class_bool>` **accept_gzip**
  214. +-----------+------------------------+
  215. | *Default* | ``true`` |
  216. +-----------+------------------------+
  217. | *Setter* | set_accept_gzip(value) |
  218. +-----------+------------------------+
  219. | *Getter* | is_accepting_gzip() |
  220. +-----------+------------------------+
  221. If ``true``, this header will be added to each request: ``Accept-Encoding: gzip, deflate`` telling servers that it's okay to compress response bodies.
  222. 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``.
  223. If the user has specified their own ``Accept-Encoding`` header, then no header will be added regardless of ``accept_gzip``.
  224. 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``.
  225. ----
  226. .. _class_HTTPRequest_property_body_size_limit:
  227. - :ref:`int<class_int>` **body_size_limit**
  228. +-----------+----------------------------+
  229. | *Default* | ``-1`` |
  230. +-----------+----------------------------+
  231. | *Setter* | set_body_size_limit(value) |
  232. +-----------+----------------------------+
  233. | *Getter* | get_body_size_limit() |
  234. +-----------+----------------------------+
  235. 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.
  236. ----
  237. .. _class_HTTPRequest_property_download_chunk_size:
  238. - :ref:`int<class_int>` **download_chunk_size**
  239. +-----------+--------------------------------+
  240. | *Default* | ``65536`` |
  241. +-----------+--------------------------------+
  242. | *Setter* | set_download_chunk_size(value) |
  243. +-----------+--------------------------------+
  244. | *Getter* | get_download_chunk_size() |
  245. +-----------+--------------------------------+
  246. The size of the buffer used and maximum bytes to read per iteration. See :ref:`HTTPClient.read_chunk_size<class_HTTPClient_property_read_chunk_size>`.
  247. 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.
  248. ----
  249. .. _class_HTTPRequest_property_download_file:
  250. - :ref:`String<class_String>` **download_file**
  251. +-----------+--------------------------+
  252. | *Default* | ``""`` |
  253. +-----------+--------------------------+
  254. | *Setter* | set_download_file(value) |
  255. +-----------+--------------------------+
  256. | *Getter* | get_download_file() |
  257. +-----------+--------------------------+
  258. The file to download into. Will output any received file into it.
  259. ----
  260. .. _class_HTTPRequest_property_max_redirects:
  261. - :ref:`int<class_int>` **max_redirects**
  262. +-----------+--------------------------+
  263. | *Default* | ``8`` |
  264. +-----------+--------------------------+
  265. | *Setter* | set_max_redirects(value) |
  266. +-----------+--------------------------+
  267. | *Getter* | get_max_redirects() |
  268. +-----------+--------------------------+
  269. Maximum number of allowed redirects.
  270. ----
  271. .. _class_HTTPRequest_property_timeout:
  272. - :ref:`int<class_int>` **timeout**
  273. +-----------+--------------------+
  274. | *Default* | ``0`` |
  275. +-----------+--------------------+
  276. | *Setter* | set_timeout(value) |
  277. +-----------+--------------------+
  278. | *Getter* | get_timeout() |
  279. +-----------+--------------------+
  280. ----
  281. .. _class_HTTPRequest_property_use_threads:
  282. - :ref:`bool<class_bool>` **use_threads**
  283. +-----------+------------------------+
  284. | *Default* | ``false`` |
  285. +-----------+------------------------+
  286. | *Setter* | set_use_threads(value) |
  287. +-----------+------------------------+
  288. | *Getter* | is_using_threads() |
  289. +-----------+------------------------+
  290. If ``true``, multithreading is used to improve performance.
  291. Method Descriptions
  292. -------------------
  293. .. _class_HTTPRequest_method_cancel_request:
  294. - void **cancel_request** **(** **)**
  295. Cancels the current request.
  296. ----
  297. .. _class_HTTPRequest_method_get_body_size:
  298. - :ref:`int<class_int>` **get_body_size** **(** **)** |const|
  299. Returns the response body length.
  300. \ **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``.
  301. ----
  302. .. _class_HTTPRequest_method_get_downloaded_bytes:
  303. - :ref:`int<class_int>` **get_downloaded_bytes** **(** **)** |const|
  304. Returns the amount of bytes this HTTPRequest downloaded.
  305. ----
  306. .. _class_HTTPRequest_method_get_http_client_status:
  307. - :ref:`Status<enum_HTTPClient_Status>` **get_http_client_status** **(** **)** |const|
  308. Returns the current status of the underlying :ref:`HTTPClient<class_HTTPClient>`. See :ref:`Status<enum_HTTPClient_Status>`.
  309. ----
  310. .. _class_HTTPRequest_method_request:
  311. - :ref:`Error<enum_@GlobalScope_Error>` **request** **(** :ref:`String<class_String>` url, :ref:`PackedStringArray<class_PackedStringArray>` custom_headers=PackedStringArray(), :ref:`bool<class_bool>` ssl_validate_domain=true, :ref:`Method<enum_HTTPClient_Method>` method=0, :ref:`String<class_String>` request_data="" **)**
  312. Creates request on the underlying :ref:`HTTPClient<class_HTTPClient>`. If there is no configuration errors, it tries to connect using :ref:`HTTPClient.connect_to_host<class_HTTPClient_method_connect_to_host>` and passes parameters onto :ref:`HTTPClient.request<class_HTTPClient_method_request>`.
  313. Returns :ref:`@GlobalScope.OK<class_@GlobalScope_constant_OK>` if request is successfully created. (Does not imply that the server has responded), :ref:`@GlobalScope.ERR_UNCONFIGURED<class_@GlobalScope_constant_ERR_UNCONFIGURED>` if not in the tree, :ref:`@GlobalScope.ERR_BUSY<class_@GlobalScope_constant_ERR_BUSY>` if still processing previous request, :ref:`@GlobalScope.ERR_INVALID_PARAMETER<class_@GlobalScope_constant_ERR_INVALID_PARAMETER>` if given string is not a valid URL format, or :ref:`@GlobalScope.ERR_CANT_CONNECT<class_@GlobalScope_constant_ERR_CANT_CONNECT>` if not using thread and the :ref:`HTTPClient<class_HTTPClient>` cannot connect to host.
  314. \ **Note:** When ``method`` is :ref:`HTTPClient.METHOD_GET<class_HTTPClient_constant_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 <https://datatracker.ietf.org/doc/html/rfc7231#section-4.3.1>`__ for more details). As a workaround, you can send data as a query string in the URL (see :ref:`String.uri_encode<class_String_method_uri_encode>` for an example).
  315. \ **Note:** It's recommended to use transport encryption (SSL/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.
  316. ----
  317. .. _class_HTTPRequest_method_request_raw:
  318. - :ref:`Error<enum_@GlobalScope_Error>` **request_raw** **(** :ref:`String<class_String>` url, :ref:`PackedStringArray<class_PackedStringArray>` custom_headers=PackedStringArray(), :ref:`bool<class_bool>` ssl_validate_domain=true, :ref:`Method<enum_HTTPClient_Method>` method=0, :ref:`PackedByteArray<class_PackedByteArray>` request_data_raw=PackedByteArray() **)**
  319. Creates request on the underlying :ref:`HTTPClient<class_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<class_HTTPClient_method_connect_to_host>` and passes parameters onto :ref:`HTTPClient.request<class_HTTPClient_method_request>`.
  320. Returns :ref:`@GlobalScope.OK<class_@GlobalScope_constant_OK>` if request is successfully created. (Does not imply that the server has responded), :ref:`@GlobalScope.ERR_UNCONFIGURED<class_@GlobalScope_constant_ERR_UNCONFIGURED>` if not in the tree, :ref:`@GlobalScope.ERR_BUSY<class_@GlobalScope_constant_ERR_BUSY>` if still processing previous request, :ref:`@GlobalScope.ERR_INVALID_PARAMETER<class_@GlobalScope_constant_ERR_INVALID_PARAMETER>` if given string is not a valid URL format, or :ref:`@GlobalScope.ERR_CANT_CONNECT<class_@GlobalScope_constant_ERR_CANT_CONNECT>` if not using thread and the :ref:`HTTPClient<class_HTTPClient>` cannot connect to host.
  321. ----
  322. .. _class_HTTPRequest_method_set_http_proxy:
  323. - void **set_http_proxy** **(** :ref:`String<class_String>` host, :ref:`int<class_int>` port **)**
  324. Sets the proxy server for HTTP requests.
  325. The proxy server is unset if ``host`` is empty or ``port`` is -1.
  326. ----
  327. .. _class_HTTPRequest_method_set_https_proxy:
  328. - void **set_https_proxy** **(** :ref:`String<class_String>` host, :ref:`int<class_int>` port **)**
  329. Sets the proxy server for HTTPS requests.
  330. The proxy server is unset if ``host`` is empty or ``port`` is -1.
  331. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  332. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  333. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  334. .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
  335. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
  336. .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`