Перейти к содержимому

Выполнить HTTP запрос

image_1

Описание

Блок выполняет HTTP-запрос к указанному ресурсу и возвращает ответ сервера, заголовки ответа и HTTP-статус. Блок поддерживает методы GET, PUT, POST, DELETE, передачу заголовков, параметров, тела запроса, файлов и аутентификацию.

Описание параметров

Блок имеет ряд параметров:

  1. Url - адрес ресурса, к которому выполняется запрос.

    Тип данных: str (Строка)

    Пример: https://jsonplaceholder.typicode.com/posts/1

  2. Таймаут - максимальное время ожидания ответа от сервера в секундах.

    Тип данных: int (Целое число)

    Пример: 30

  3. Метод - HTTP-метод запроса. Доступные значения: GET, PUT, POST, DELETE.

    Тип данных: dropdown (Выпадающий список)

    Пример: GET

  4. Кодировка - кодировка ответа сервера.

    Тип данных: str (Строка)

    Пример: utf-8

  5. Аутентификация - данные для авторизации на стороне сервера.

    Тип данных: list (Список)

    Пример: ['login', 'password']

  6. Тип аутентификации - способ авторизации. Доступные значения: Basic, Digest, OAuth 1.

    Тип данных: dropdown (Выпадающий список)

    Пример: Basic

  7. Заголовки - словарь HTTP-заголовков запроса.

    Тип данных: dict (Словарь)

    Пример: {"Content-Type": "application/json"}

  8. Параметры - словарь query-параметров запроса.

    Тип данных: dict (Словарь)

    Пример: {"userId": 1}

  9. Данные - тело запроса. Для JSON-запросов передаются как JSON, для остальных типов - как данные формы или строка.

    Тип данных: dict | str (Словарь | Строка)

    Пример: {"title": "Новая запись"}

  10. Файлы - файлы для отправки multipart-запросом.

    Тип данных: dict (Словарь)

    Пример: {"file": open("C:\\\\Temp\\\\report.pdf", "rb")}


Возвращаемое значение

Блок возвращает список из трех элементов:

  1. Ответ сервера - тело ответа. Если сервер вернул JSON, будет получен словарь или список. Если сервер вернул PDF, будет получен бинарный контент. В остальных случаях возвращается строка.

    Тип данных: list[0]: dict | list | bytes | str

    Пример: {"id": 1, "title": "delectus aut autem"}

  2. Заголовки ответа - словарь заголовков ответа сервера.

    Тип данных: list[1]: dict (Словарь)

    Пример: {"Content-Type": "application/json; charset=utf-8"}

  3. Код ответа - HTTP-статус ответа сервера.

    Тип данных: list[2]: int (Целое число)

    Пример: 200


Пример использования

В данном примере блок выполняет HTTP-запрос на создание коммита в проекте GitLab:

  1. Переменной headers присваивается словарь с заголовками запроса;
  2. Переменной data присваивается словарь с данными HTTP-запроса;
  3. Блок выполняет HTTP-запрос POST на создание нового коммита в проекте GitLab. Из документации на странице https://docs.gitlab.com/ee/api/commits.html, запрос имеет вид:
PAYLOAD=$(cat << 'JSON'
{
"branch": "master",
"commit_message": "some commit message",
"actions": [
{
"action": "create",
"file_path": "foo/bar",
"content": "some content"
}
]
}
JSON
)
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \
--data "$PAYLOAD" "https://gitlab.example.com/api/v4/projects/1/repository/commits"
  1. Переменной response присваивается ответ от сервера в виде массива, содержащего: ответ от сервера, заголовки ответа и код ответа.

Пример ответа от сервера:

[{'id': '12345678900987654321', 'short_id': 'e23d55g2',
'created_at': '2023-09-01T11:05:11.000+00:00',
'parent_ids': ['f123f123t123t123t123tre01'],
'title': 'Puzzle RPA commit', 'message': 'Puzzle RPA commit',
'author_name': 'Иван Иванов', 'author_email': 'i.ivanov@test.ru',
'authored_date': '2023-09-01T11:05:11.000+00:00', 'committer_name': 'Иван Иванов',
'committer_email': 'i.ivanov@test.ru',
'committed_date': '2023-09-01T11:05:11.000+00:00',
'trailers': {},
'web_url': 'https://gitlab.puzzle_rpa.ru/i.ivanov/puzzle_rpa_test/-/commit/12345678900987654321',
'stats': {'additions': 1, 'deletions': 0, 'total': 1}, 'status': None,
'project_id': 1, 'last_pipeline': None},
{'Server': 'test', 'Date': 'Fri, 01 Sep 2023 11:05:12 GMT',
'Content-Type': 'application/json', 'Content-Length': '732',
'Connection': 'keep-alive', 'Cache-Control': 'max-age=0, private,
must-revalidate', 'Etag': 'W/"12345678900987654321"', 'Vary': 'Origin',
'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN',
'X-Request-Id': '01Request123Id', 'X-Runtime': '0.262695',
'Strict-Transport-Security': 'max-age=63072000',
'Referrer-Policy': 'strict-origin-when-cross-origin'},
201]
  1. Из ответа переменной commits_ID присваивается ID созданного коммита;
  2. Выполняется HTTP-запрос GET на получение информации о созданном коммите. Из документации на странице https://docs.gitlab.com/ee/api/commits.html, запрос имеет вид:
curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" \
"https://gitlab.example.com/api/v4/projects/1/repository/commits/commits_ID"
  1. Результат ответа сохраняется в файл JSON.
image_2

Результат

Созданный коммит на GitLab:

image_3