# Сеть

Здесь описаны функции для работы с сетью/интернетом.

* [Download( str url, str filename ) int](/stdlib/network.md#download-str-url-str-filename-int)
* [HeadInfo( str url ) hinfo](/stdlib/network.md#headinfo-str-url-hinfo)
* [HTTPGet( str url ) buf](/stdlib/network.md#httpget-str-url-buf)
* [HTTPPage( str url ) str](/stdlib/network.md#httppage-str-url-str)
* [HTTPRequest( str url, str method, map.str params, map.str headers ) str](/stdlib/network.md#httprequest-str-url-str-method-map-str-params-map-str-headers-str)

## Типы

### hinfo

Тип *hinfo* используется для получения информации об url адресе и имеет следующие поля:

* **int Status** - статус ответа.
* **int Length** - размер содержимого. Может быть не указан (равен 0).
* **str Type** - тип содержимого. Например, *text/html; charset=UTF-8*.

## Функции для работы с HTTP

### Download( str url, str filename ) int

Функция *Download* загружает файл из указанного URL и сохранаяет его с указанным именем. Функция возвращает размер загруженного файла.

```go
    str ftemp = TempDir() + `/readme.html`
    int size = Download("https://github.com/gentee/gentee", ftemp)
```

### HeadInfo(str url) hinfo

Функция *HeadInfo* отправляет запрос **HEAD** по указанному параметру *url* и возвращает структуру *hinfo*.

### HTTPGet( str url ) buf

Функция *HTTPGet* отправляет GET запрос по указанному URL и возвращает ответ в виде переменной типа *buf*. Функция может использоваться для загрузки небольших файлов без сохранения их на диск.

### HTTPPage( str url ) str

Функция *HTTPPage* отправляет GET запрос по указанному URL и возвращает ответ в виде строки.

### HTTPRequest( str url, str method, map.str params, map.str headers ) str

Функция *HTTPRequest* отправляет HTTP запрос по указанному URL и возвращает ответ в виде строки. В параметре *method* необходимо указать метод вызова - **GET, POST, UPDATE, PUT, DELETE**. Также функция позволяет указывать параметры и заголовки запроса. Они описываются в виде ассоциативных массивов, где в качестве ключа указано имя параметра или имя заголовка. По умолчанию, при вызове *POST* параметры передаются как данные формы. Если вы хотите передавать их в JSON формате, то в параметре *headers* укажите *"Content-Type": "application/json; charset=UTF-8"*.

```go
    map empty
    Println(HTTPRequest(TESTURL, "GET", empty, empty))
    map params = { `name`: `Jong Doe`, `id`: `101` }
    Println(HTTPRequest(TESTURL, "GET", params, empty))
    Println(HTTPRequest(TESTURL, "POST", params, empty))
    map headjson = { `Content-Type`: `application/json; charset=UTF-8` }
    Println(HTTPRequest(TESTURL, "POST", params, headjson))
```


---

# Agent Instructions: 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:

```
GET https://ru.gentee.org/stdlib/network.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
