HTTP_CONNECTOR
HTTP_CONNECTOR отправляет запросы к указанному серверу и получает ответы. Ответ может быть отправлен на выходной порт или сохранён в указанном файле.
Порты HTTP_CONNECTOR:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 0 | нет | Для установки различных атрибутов шага | Любые |
Output | 0 | Содержимое ответа, путь к файлу ответа, код состояния, атрибуты шага | ||
1 | Подробности об ошибках |
Атрибуты HTTP_CONNECTOR:
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
url | нет | URL-адрес сервера, к которому подключается коннектор. Поддерживаются протоколы HTTP и HTTPS. | |
requestMethod | нет | Метод запроса. | GET (по умолчанию) | POST | PUT | PATCH | DELETE | HEAD | OPTIONS | TRACE |
additionalHttpHeaders | нет | Дополнительные свойства запроса, который будет отправлен на сервер. Представляет собой последовательность пар ключ=значение, разделенных запятой. | content-type=application/json |
requestContent | нет | Cодержимое запроса, определенное непосредственно в графе. |
|
inputFileURL | нет | URL-адрес загружаемого файла. | |
outputFileURL | нет | URL файла, в который записывается ответ на запрос. | |
appendOutput | нет | По умолчанию любой новый ответ перезаписывает старый. Если вы переключите этот атрибут на true, новый ответ будет добавлен к старым. Применяется только к выходным файлам. | |
inputMapping | нет | Сопоставление входных данных. Позволяет передавать значения атрибутов шага, сопоставляя их значения с данными из входного порта. Использование атрибута inputMapping устанавливает остальные входные атрибуты в их дефолтные значения, в связи с этим, при использовании входного маппинга стоит задавать через него сразу все значения атрибутов. |
|
outputMapping | нет | Сопоставление выходных данных. Позволяет сопоставить данные ответа на запрос (например, содержимое тела ответа, код состояния и т. д.) с метаданными выходного порта. |
|
errorMapping | нет | Маппинг ошибок. Позволяет сопоставить сообщения об ошибке с метаданными выходного порта. |
|
redirectErrorOutput | нет | Позволяет перенаправить сведения об ошибке на нулевой выходной порт. | redirectErrorOutput="false" по умолчанию |
timeout | нет | Как долго шаг ждет ответа. Если он не получает ответ в течение указанного срока, выполнение шага завершается неудачей. По умолчанию HTTP_CONNECTOR имеет тайм-аут в одну минуту. Тайм-аут указывается в миллисекундах. | timeout="60000" |
retryCount | нет | Количество раз, которое нужно повторить запрос в случае сбоя. Сбой означает то же самое, что и использование компонентом порта ошибки. Компонент считает сбой, если он не может обработать запрос/ответ. Если он обрабатывает запрос и получает ответ с кодом статуса ошибки (например, 500), это не является сбоем. | retryCount="6" |
retryDelay | нет | Как долго шаг должен ждать перед повторной попыткой запроса. Если retryCount не нулевой, шаг будет ждать дополнительное время перед повторной отправкой запроса. Значение атрибута — это список целых чисел, разделенных запятой. Задержка повтора указывается в секундах. Если количество повторных попыток превышает размер списка, то используется последняя задержка в списке. | retryDelay="4,2,5" |
dnsResolver | нет | Для явного указания адреса сервера. Установите порт ":0", чтобы использовать обычный порт для указанной схемы (например, 80 для http). Порты в самом URL всегда будут использоваться вместо порта в переопределенном адресе. | dev.allbridge.ru=127.0.0.1:0,127.0.0.1:443; another.domain.ru=192.168.0.0:0 |
Маппинг входных данных
В атрибуте inputMapping
можно указать, какие поля из входной записи следует сопоставить с атрибутами шага.
- URL — адрес, по которому будет отправлен запрос.
- requestMethod — метод, который будет использован при отправке запроса.
- additionalHttpHeaders - дополнительные заголовки запроса.
- requestContent — содержимое отправляемого запроса в виде строки.
- inputFileUrl — адрес файла, котрый нужно отправить, относительно проекта.
- outputFileURL - адрес файла в который записать ответ.
- appendOutput - применяется, если указан outputFileURL. При appendOutput=true новый ответ будет дозаписан в выходной файл без очистки файла от предыдущего содержимого.
Пример заполнения преобразования для маппинга входных данных:
function transform() {
$out[0].requestContent = $in[1].requestContent;
return ALL;
}
Маппинг выходных данных
С помощью атрибута outputMapping
на первый выходной порт можно отправить такие данные:
- Результат — предоставляет данные о результате запроса. К нему относятся:
- content — содержимое HTTP-ответа (response body) в виде строки. Это поле будет иметь значение null, если ответ записывается в файл.
- outputFilePath - путь к файлу, в который записан ответ. Будет null, если ответ не записывается в файл.
- statusCode — код состояния HTTP ответа.
- rawHeaders — заголовки (response headers) ответа.
- errorMessage — сообщение об ошибке в случае, если вывод ошибки перенаправляется на стандартный порт вывода.
Пример заполнения преобразования для маппинга выходных данных:
function transform() {
$out[0].content = $in[1].content;
$out[0].outputFilePath = $in[1].outputFilePath;
$out[0].statusCode = $in[1].statusCode;
$out[0].rawHeaders = $in[1].rawHeaders;
$out[0].errorMesage = $in[1].errorMesage;
return ALL;
}
Маппинг ошибок
С помощью атрибута errorMapping
можно вывести сооющение об ошибке на выходной порт HTTP_CONNECTOR. Поведение очень похоже на отображение выходных данных, но данные при этом выводятся на первый выходной порт шага, вместо нулевого.
Для того, чтобы потенциальная ошибка была выведена на порт ошибки, нужно указать для атрибута redirectErrorOutput
значение false
. При redirectErrorOutput=true
ошибка будет выведена на нулевой выходной порт, вместе с остальными выходными данными шага.
Если в ответ на запрос приходит ошибка, а
errorMapping
не заполнен иredirectErrorOutput=false
, то граф не сможет её обработать и упадет.
Пример заполнения преобразования для маппинга ошибок:
function transform() {
$out[1].errorMesage = $in[1].errorMesageж;
return ALL;
}
Пример 1. Скачать Web-страницу
Загрузите содержимое веб-страницы modernsolution.ru/onebridge с помощью HTTP_CONNECTOR. Сохраните результат в файл для дальнейшей обработки.
Решение
Используйте атрибуты url
, requestMethod
и outputFileURL
.
Загруженная страница будет сохранена в файле result.html в каталоге ${DATAOUT_DIR}.
Атрибут | Значение |
---|---|
url | |
requestMethod | get |
outputFileURL | ${DATAOUT_DIR}/result.html |
Пример 2. Получение токенов доступа для Onebridge и запуск задания с помощью HTTP_CONNECTOR
Цель данного примера - показать схему авторизации с получением токенов через api для запуска в работу задания Onebridge.
Для того чтобы запустить задание в работу, нужно быть авторизованным пользователем с набором привилегий для запуска. Предположим, все нужные привилегии пользователю выданы, осталось получить токен для авторизованной отправки запроса на запуск задания.
Чтобы получить токены, нужно отправить запрос на аутентификацию с помощью того же HTTP_CONNECTOR:
- Переместите на рабочую область Дизайнера шаг HTTP_CONNECTOR из палитры компонентов.
- Заполните атрибуты шага с помощью редактора шага:
Атрибут | Значение |
---|---|
url | |
requestMethod | POST |
additionalHttpHeaders | content-type=application/json |
requestContent | {"username": "${username}", "password":"${password}"} |
outputMapping |
|
errorMapping |
|
redirectErrorOutput | false |
- Полученные токены нужно передать дальше в MAP через первый выходной порт. Для обработки ошибок заполните errorMapping и подключите ко второму выходному порту шаг TRASH.
- В MAP можно распарсить присланный в ответе на запрос json в две отдельных переменных следующим образом:
Атрибут | Значение |
---|---|
transform |
|
- Теперь нужно отправить авторизованный запрос на запуск задания, для этого используем новый HTTP_CONNECTOR, заполнив его атрибуты следующим образом:
Атрибут | Значение |
---|---|
url | |
requestMethod | POST |
inputMapping |
|
outputMapping |
|
errorMapping |
|
redirectErrorOutput | false |
- В случае успешного ответа на post-запрос для запуска задания должен прийти номер запущенного задания. Выведем его номер на первый выходной порт, например в файл с помощью FLAT_FILE_WRITER. Порт ошибок можно соединить с еще одним шагом TRASH.
- Для связи между шагами нужно описать метаданные и присвоить их соответствующим рёбрам.
<Metadata id="meta0">
<Record fieldDelimiter="," name="content" recordDelimiter="\n" type="delimited">
<Field name="content" type="string"/>
<Field name="outputFilePath" type="string"/>
<Field name="statusCode" type="integer"/>
<Field name="rawHeaders" type="string"/>
<Field name="errorMessage" type="string"/>
</Record>
</Metadata>
<Metadata id="meta1">
<Record fieldDelimiter="," name="tokens" recordDelimiter="\n" type="delimited">
<Field name="access_token" type="string"/>
<Field name="refresh_token" type="string"/>
</Record>
</Metadata>
<Metadata id="meta2">
<Record fieldDelimiter="," name="error" recordDelimiter="\n" type="delimited">
<Field name="errorMessage" type="string"/>
</Record>
</Metadata>
<Metadata id="meta3">
<Record fieldDelimiter="," name="tokens_and_input" recordDelimiter="\n" type="delimited">
<Field name="access_token" type="string"/>
<Field name="refresh_token" type="string"/>
<Field name="url" type="string"/>
<Field name="requestMethod" type="string"/>
<Field name="additionalHttpHeaders" type="string"/>
<Field name="requestContent" type="string"/>
</Record>
</Metadata>
Граф с распределенными метаданными будет выглядеть вот так:
Распределение метаданных на рёбрах графа

После того как граф отработает, можно просмотреть содержимое ребер в датаинспекторе. В данном примере на последнем из ребер будет отображаться номер запущенного графа в поле "content".
Просмотр датаинспектора ребра отработавшего графа
