# HttpClient

## Overview

A wrapper for `Apache HttpClient` for executing requests like GET, POST, PUT, and more, with support for cookies, proxies, and timeouts.

## Features

The client facilitates various HTTP requests (e.g., GET, POST, DELETE) and supports configuration options like cookies, proxy servers, and timeouts. It enables both synchronous and asynchronous communication, offering flexibility for different use cases.

For configuration details, see the [Http client configuration](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/httpclientconfig) section.

## Methods Summarized

| Type                                                                                                    | Name                                                                                                                               | Summary                                                                                                                                                                      |
| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| void                                                                                                    | [close()](#close)                                                                                                                  | releases all resources that this client has, should be called after usage.                                                                                                   |
| [DeleteRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/deleterequest)   | [createDeleteRequest(url)](#createdeleterequest-url)                                                                               | Creates a new delete request (a request to delete a resource on server).                                                                                                     |
| [GetRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/getrequest)         | [createGetRequest(url)](#creategetrequest-url)                                                                                     | Creates a new get request (retrieves whatever information is stored on specified url).                                                                                       |
| [HeadRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/headrequest)       | [createHeadRequest(url)](#createheadrequest-url)                                                                                   | Creates a new head request (similar to get request, must not contain body content).                                                                                          |
| [OptionsRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/optionsrequest) | [createOptionsRequest(url)](#createoptionsrequest-url)                                                                             | Creates a new options request (a request for information about communication options).                                                                                       |
| [PatchRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/patchrequest)     | [createPatchRequest(url)](#createpatchrequest-url)                                                                                 | Creates a new patch request (used for granular updates).                                                                                                                     |
| [PostRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/postrequest)       | [createPostRequest(url)](#createpostrequest-url)                                                                                   | Create a new post request ( Origin server should accept/process the submitted data.                                                                                          |
| [PutRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/putrequest)         | [createPutRequest(url)](#createputrequest-url)                                                                                     | Creates a new put request (similar to post request, contains information to be submitted).                                                                                   |
| [TraceRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/tracerequest)     | [createTraceRequest(url)](#createtracerequest-url)                                                                                 | Creates a new trace request (debug request, server will just echo back).                                                                                                     |
| [Promise](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/promise)                          | [execute(requests)](#execute-requests)                                                                                             | Execute multiple requests asynchronously.                                                                                                                                    |
| [Promise](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/promise)                          | [executeRequest(requests, username, password)](#executerequest-requests-username-password)                                         | Execute multiple requests asynchronously, it assumes that all request are to the same server (it gives the same username, password to all requests).                         |
| [Promise](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/promise)                          | [executeRequest(requests, username, password, workstation, domain)](#executerequest-requests-username-password-workstation-domain) | Execute multiple requests asynchronously, it assumes that all request are to the same server (it gives the same username, password, workstation and domain to all requests). |
| [Cookie](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/cookie)                 | [getCookie(cookieName)](#getcookie-cookiename)                                                                                     | Get a cookie by name.                                                                                                                                                        |
| [Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array)                              | [getCookies()](#getcookies)                                                                                                        | Get all cookies from this client.                                                                                                                                            |
| void                                                                                                    | [setClientProxyCredentials(userName, password)](#setclientproxycredentials-username-password)                                      | Set proxy credentials.                                                                                                                                                       |
| void                                                                                                    | [setClientProxyServer(hostname, port)](#setclientproxyserver-hostname-port)                                                        | Set proxy server.                                                                                                                                                            |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                          | [setCookie(cookieName, cookieValue)](#setcookie-cookiename-cookievalue)                                                            | Add cookie to the this client.                                                                                                                                               |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                          | [setCookie(cookieName, cookieValue, domain)](#setcookie-cookiename-cookievalue-domain)                                             | Add cookie to the this client.                                                                                                                                               |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                          | [setCookie(cookieName, cookieValue, domain, path)](#setcookie-cookiename-cookievalue-domain-path)                                  | Add cookie to the this client.                                                                                                                                               |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                          | [setCookie(cookieName, cookieValue, domain, path, maxAge)](#setcookie-cookiename-cookievalue-domain-path-maxage)                   | Add cookie to the this client.                                                                                                                                               |
| [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean)                          | [setCookie(cookieName, cookieValue, domain, path, maxAge, secure)](#setcookie-cookiename-cookievalue-domain-path-maxage-secure)    | Add cookie to the this client.                                                                                                                                               |
| void                                                                                                    | [setTimeout(msTimeout)](#settimeout-mstimeout)                                                                                     | Sets a timeout in milliseconds for retrieving of data (when 0 there is no timeout).                                                                                          |

## Methods Detailed

### close()

releases all resources that this client has, should be called after usage.

**Returns:** void

### createDeleteRequest(url)

Creates a new delete request (a request to delete a resource on server).

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **url** ;

**Returns:** [DeleteRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/deleterequest) a DeleteRequest object for creating a DELETE request to the specified URL.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var request = client.createDeleteRequest('http://www.servoy.com/delete.me');
var response = request.executeRequest();
var httpCode = response.getStatusCode(); // httpCode 200 is ok"
var content = response.getResponseBody();
```

### createGetRequest(url)

Creates a new get request (retrieves whatever information is stored on specified url).\
If this url is a https ssl encrypted url which certificates are not in the java certificate store.\
(Like a self signed certificate or a none existing root certificate)\
The system administrator does have to add that certificate (chain) to the java install on the server.\
See <https://wiki.servoy.com/display/tutorials/Import+a+%28Root%29+certificate+in+the+java+cacerts+file>

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **url** ;

**Returns:** [GetRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/getrequest) a GetRequest object for creating a GET request to the specified URL.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var request = client.createGetRequest('http://www.servoy.com');
var response = request.executeRequest();
var httpCode = response.getStatusCode(); // httpCode 200 is ok"
var content = response.getResponseBody();
```

### createHeadRequest(url)

Creates a new head request (similar to get request, must not contain body content).

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **url** ;

**Returns:** [HeadRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/headrequest) a HeadRequest object for creating a HEAD request to the specified URL.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var request = client.createHeadRequest('http://www.servoy.com');
var response = request.executeRequest();
var httpCode = response.getStatusCode(); // httpCode 200 is ok
var header = response.getResponseHeaders('last-modified');
```

### createOptionsRequest(url)

Creates a new options request (a request for information about communication options).

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **url** ;

**Returns:** [OptionsRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/optionsrequest) an OptionsRequest object for creating an OPTIONS request to the specified URL.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var request = client.createOptionsRequest('http://www.servoy.com');
var methods = request.getAllowedMethods(request.executeRequest());
```

### createPatchRequest(url)

Creates a new patch request (used for granular updates).

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **url** ;

**Returns:** [PatchRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/patchrequest) a PatchRequest object for creating a PATCH request to the specified URL.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var request = client.createPatchRequest('http://jakarta.apache.org');
request.setBodyContent('{"email": "newemail@newdomain.com"}','application/json');
var httpCode = request.executeRequest().getStatusCode() // httpCode 200 is ok
```

### createPostRequest(url)

Create a new post request ( Origin server should accept/process the submitted data.)\
If this url is a https ssl encrypted url which certificates are not in the java certificate store.\
(Like a self signed certificate or a none existing root certificate)\
The system administrator does have to add that certificate (chain) to the java install on the server.\
See <https://wiki.servoy.com/display/tutorials/Import+a+%28Root%29+certificate+in+the+java+cacerts+file>

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **url** ;

**Returns:** [PostRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/postrequest) a PostRequest object for creating a POST request to the specified URL.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var poster = client.createPostRequest('https://twitter.com/statuses/update.json');
poster.addParameter('status',globals.textToPost);
poster.addParameter('source','Test Source');
poster.setCharset('UTF-8');
var httpCode = poster.executeRequest(globals.twitterUserName, globals.twitterPassword).getStatusCode(); // httpCode 200 is ok
```

### createPutRequest(url)

Creates a new put request (similar to post request, contains information to be submitted).

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **url** ;

**Returns:** [PutRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/putrequest) a PutRequest object for creating a PUT request to the specified URL.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var request = client.createPutRequest('http://jakarta.apache.org');
request.setFile('UploadMe.gif');
var httpCode = putRequest.executeRequest().getStatusCode() // httpCode 200 is ok
```

### createTraceRequest(url)

Creates a new trace request (debug request, server will just echo back).

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **url** ;

**Returns:** [TraceRequest](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/tracerequest) a TraceRequest object for creating a TRACE request to the specified URL.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var response = request.executeRequest();
var httpCode = response.getStatusCode(); // httpCode 200 is ok"
var content = response.getResponseBody();
```

### execute(requests)

Execute multiple requests asynchronously.\
A Promise is returned that resolves with an array of Response objects when all requests are complete in the same order as the Request objects.\
Because some request can fail and others can just work, this promise will always just resolve (not reject) with response object having the message of the error or the actual normal response.

**Parameters**

* [Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array) **requests** ;

**Returns:** [Promise](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/promise) The promise object that resolves with an array of Response objects when all requests are complete in the same order as the Request objects.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var requests = [];
requests.push(client.createGetRequest("https://www.google.com"))
requests.push(client.createGetRequest("https://servoy.com"))
var promise = client.execute(requests)
promise.then(/** @type {Array<plugins.http.Response>} */
responses => {
   for (var index = 0; index < responses.length; index++) {
     application.output(responses[index].getStatusCode())
     application.output(responses[index].getResponseBody().substring(0,100));
     application.output(responses[index].getFileUpload());
     responses[index].close();
   }
});
```

### executeRequest(requests, username, password)

Execute multiple requests asynchronously, it assumes that all request are to the same server (it gives the same username, password to all requests).

A Promise is returned that resolves with an array of Response objects when all requests are complete in the same order as the Request objects.\
Because some request can fail and others can just work, this promise will always just resolve (not reject) with response object having the message of the error or the actual normal response.

**Parameters**

* [Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array) **requests** ;
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **username** the user name
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **password** the password

**Returns:** [Promise](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/promise) The promise object that resolves with an array of Response objects when all requests are complete in the same order as the Request objects.

**Sample**

```js
var client = plugins.http.createNewHttpClient();
var requests = [];
requests.push(client.createGetRequest("https://www.google.com"))
requests.push(client.createGetRequest("https://servoy.com"))
var promise = client.execute(requests)
promise.then(/** @type {Array<plugins.http.Response>} */
responses => {
   for (var index = 0; index < responses.length; index++) {
     application.output(responses[index].getStatusCode())
     application.output(responses[index].getResponseBody().substring(0,100));
     application.output(responses[index].getFileUpload());
     responses[index].close();
   }
});
```

### executeRequest(requests, username, password, workstation, domain)

Execute multiple requests asynchronously, it assumes that all request are to the same server (it gives the same username, password, workstation and domain to all requests).

A Promise is returned that resolves with an array of Response objects when all requests are complete in the same order as the Request objects.\
Because some request can fail and others can just work, this promise will always just resolve (not reject) with response object having the message of the error or the actual normal response.

BaseRequest\[] request

**Parameters**

* [Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array) **requests** ;
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **username** the user name
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **password** the password
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **workstation** The workstation the authentication request is originating from.
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **domain** The domain to authenticate within.

**Returns:** [Promise](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/promise) The promise object that resolves with an array of Response objects when all requests are complete in the same order as the Request objects.

### getCookie(cookieName)

Get a cookie by name.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieName** ;

**Returns:** [Cookie](https://docs.servoy.com/reference/servoyextensions/server-plugins/http/cookie) the cookie with the specified name, or null if it does not exist.

**Sample**

```js
var cookie = client.getCookie('JSESSIONID');
if (cookie != null)
{
	// do something
}
else
	client.setCookie('JSESSIONID', 'abc', 'localhost', '/', -1, false)
```

### getCookies()

Get all cookies from this client.

**Returns:** [Array](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/array) an array of all cookies currently stored in the client.

**Sample**

```js
var cookies = client.getHttpClientCookies()
```

### setClientProxyCredentials(userName, password)

Set proxy credentials.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **userName** ;
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **password** ;

**Returns:** void

**Sample**

```js
client.setClientProxyCredentials('my_proxy_username','my_proxy_password');
```

### setClientProxyServer(hostname, port)

Set proxy server.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **hostname** - proxy host // null value will clear proxyHost settings;
* [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) **port** - proxy port //null value will clear proxyHost settings;

**Returns:** void

**Sample**

```js
client.setClientProxyServer('server',port);
```

### setCookie(cookieName, cookieValue)

Add cookie to the this client.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieName** the name of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieValue** the value of the cookie

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if the cookie was successfully set; otherwise, false.

**Sample**

```js
var cookieSet = client.setCookie('JSESSIONID', 'abc', 'localhost', '/', -1, false)
if (cookieSet)
{
	//do something
}
```

### setCookie(cookieName, cookieValue, domain)

Add cookie to the this client.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieName** the name of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieValue** the value of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **domain** the domain

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if the cookie was successfully set; otherwise, false.

**Sample**

```js
var cookieSet = client.setCookie('JSESSIONID', 'abc', 'localhost', '/', -1, false)
if (cookieSet)
{
	//do something
}
```

### setCookie(cookieName, cookieValue, domain, path)

Add cookie to the this client.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieName** the name of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieValue** the value of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **domain** the domain
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **path** the path

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if the cookie was successfully set; otherwise, false.

**Sample**

```js
var cookieSet = client.setCookie('JSESSIONID', 'abc', 'localhost', '/', -1, false)
if (cookieSet)
{
	//do something
}
```

### setCookie(cookieName, cookieValue, domain, path, maxAge)

Add cookie to the this client.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieName** the name of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieValue** the value of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **domain** the domain
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **path** the path
* [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) **maxAge** maximum age of cookie

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if the cookie was successfully set; otherwise, false.

**Sample**

```js
var cookieSet = client.setCookie('JSESSIONID', 'abc', 'localhost', '/', -1, false)
if (cookieSet)
{
	//do something
}
```

### setCookie(cookieName, cookieValue, domain, path, maxAge, secure)

Add cookie to the this client.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieName** the name of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **cookieValue** the value of the cookie
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **domain** the domain
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **path** the path
* [Number](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/number) **maxAge** maximum age of cookie
* [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) **secure** true if it is a secure cookie, false otherwise

**Returns:** [Boolean](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/boolean) true if the cookie was successfully set; otherwise, false.

**Sample**

```js
var cookieSet = client.setCookie('JSESSIONID', 'abc', 'localhost', '/', -1, false)
if (cookieSet)
{
	//do something
}
```

### setTimeout(msTimeout)

Sets a timeout in milliseconds for retrieving of data (when 0 there is no timeout).

**Parameters**

* [Object](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/object) **msTimeout** ;

**Returns:** void

**Sample**

```js
client.setTimeout(1000)
```

***
