> For the complete documentation index, see [llms.txt](https://mind-expression-docs.gitbook.io/home/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mind-expression-docs.gitbook.io/home/how-to-guides/intelligent-process/package-kernel-http.md).

# Package: Kernel-HTTP

## Class: HTTPClient

### Introduction

**Environment: `container`**

HTTPClient is a HTTP client library.

It has the following attributes:

* `host` the host of the request
* `port` the port of the request
* `url` the url of the request
* `timeout` the timeout of the request
* `contents` the contents of the request
* `contentType` the content type of the request
* `method` the http request method.

It has the following methods:

* `queryAt:put:` Add key equals value as an HTTP query parameter to the current request.
* `headerAt:put:` Add key equals value as an HTTP header to the current request.
* `execute` execute the request
* `get` execute a get request
* `put` execute a put request
* `post` execute a post request
* `delete` execute a delete request
* `head` execute a head request

You can use it to make HTTP requests to a server.

for example, for a HTTP get:

```smalltalk
httpClient := HTTPClient new.
httpClient url: 'http://www.example.com'.
result := httpClient get.
```

and for a HTTP post:

```smalltalk
httpClient := HTTPClient new.
httpClient url: 'http://www.example.com/api'.
httpClient
 contents:
 { ('key1' -> 'key1').
   ('key2' -> 2) } asJson.
result := httpClient post.
```

The result is a Dictionary which has three keys:

* `status` The http status code.
* `headers` The http headers.
* `response` The http response body. It wil be parsed as JSON if possible, otherwise it will be a string.

For example, you can check the status code like this:

```smalltalk
result := httpClient get.
" If the HTTP status code differs from 200, exit the current block. "
(result at: 'status') = 200 ifFalse: [ ^ nil ].
```

Sometimes, the http request may raise an error for a failure request, we can catch error like this:

```smalltalk
error := nil.
[ httpClient get ] onErrorDo: [ :ex | error := ex ].
" If error is not nil, it means the http request failed. "
error ifNotNil: [
  " The error is an APIError object, we can check the error code like this: "
  error code = 'http-request-error'.
  "we can terminate the execution by caret operator.  "
  ^ nil ].
```

### Instance Method

#### Category: accessing - request

* **`contentType`** - Get the contentType of the HTTPClient.
* **`contentType:`** - Set the contentType of the HTTPClient.
* **`contents`** - Get the contents of the HTTPClient.
* **`contents:`** - Set the contents of the HTTPClient.
* **`headerAt:put:`** - Set key equals value in the HTTP header of the current request.

  For example:

  ```smalltalk
  self headerAt: 'x-conversation-id' put: UUIDGenerator next.
  ```
* **`host`** - Get the host of the HTTPClient.
* **`host:`** - Set the host of the HTTPClient.
* **`method`** - Get the method of the HTTPClient.
* **`method:`** - Set the method of the HTTPClient.
* **`port`** - Get the port of the HTTPClient.
* **`port:`** - Set the port of the HTTPClient.
* **`queryAt:put:`** - Add key equals value as an HTTP query parameter to the current request.

  If a key is already present, its corresponding value will be replaced.

  For example:

  ```smalltalk
  self queryAt: 'id' put: '12'.
  ```
* **`timeout`** - Get the timeout of the HTTPClient.
* **`timeout:`** - Set the timeout of the HTTPClient.
* **`url`** - Get the url of the HTTPClient.
* **`url:`** - Set the url of the HTTPClient.

#### Category: operations

* **`delete`** - Execute an HTTP DELETE the request set up and return the response #contents.
* **`execute`** - Execute the currently set up request to generate a response. Return the #contents of the response, if any.
* **`get`** - Execute an HTTP GET the request set up and return the response #contents.
* **`head`** - Execute a HTTP HEAD on the request set up and return nil.
* **`post`** - Execute an HTTP POST the request set up and return the response #contents.
* **`put`** - Execute an HTTP PUT the request set up and return the response #contents.

## Class: UUIDGenerator

### Introduction

**Environment: `container`**

The UUIDGenerator generates UUIDs, this can be used by following the syntax below

```smalltalk
"Return a new UUID string."
UUIDGenerator next
```

### Class Method

#### Category: accessing

* **`next`** - returns a new UUID string.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://mind-expression-docs.gitbook.io/home/how-to-guides/intelligent-process/package-kernel-http.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
