Сетевые запросы
Сетевой модуль stappler_network предоставляет упрощённый интерфейс для выполнения сетевых запросов поверх libcurl, выполняет инициализацию, реинициализацию и обеспечивает повторное использование существующих соединений.
Публичный интерфейс модуля неинформативен сам по себе и основан на функциях, определённых в SPNetworkData.h. Такое решение является компромиссом в попытке закрыть пользователю SDK возможность неверно использовать детали реализации.
Основные функции интерфейса:
init— инициализирует интерфейс с используемым методом запроса и URLaddHeader— добавляет заголовок к запросуsetMailFrom— добавляет информацию об отправителе постового сообщения (для SMTP)addMailTo— добавляет получателя почтового сообщения (для SMTP)setAuthority— устанавливает данные для авторизации на сервереsetProxy— устанавливает данные прокси-сервераsetReceiveFile— устанавливает файл для записи результата запросаsetReceiveCallback— устанавливает функцию для записи результата запросаsetSendFile— устанавливает файл для отправкиsetSendCallback— устанавливает функцию для получения отправляемых данныхsetSendData— устанавливает объект данных (типа Value) для отправкиsetDownloadProgress— устанавливает функцию индикации прогресса загрузки ответаsetUploadProgress— устанавливает функцию индикации прогресса отправки запросаsetVerifyTls— устанавливает флаг необходимой верификации tlsperform— выполняет запросgetResponseCode— получает код ответаgetErrorCode— получает код ошибки при выполнении запросаgetError— получает текст ошибки при выполнении запросаgetReceivedHeaderString— получает строковое значение заголовка ответаgetReceivedHeaderInt— получает целочисленное значение заголовка ответаgetRecievedHeaders— получает заголовки ответаgetResponseContentType— получает тип контента ответа
Запрос проходит следующие стадии выполнения:
- Пользовательская подготовка: заполняются необходимые структуры данных
- Вызов
perform - Системная подготовка, интерпретация пользовательских значений в значения CURL
- Выполнение запроса
- Системная финализация
- Возврат из
perform - Пользовательская финализация — чтение результата
MultiHandle позволяет обрабатывать несколько сетевых запросов в одном потоке. Его функции:
addHandle: добавляет подготовленный запрос к списку исполняемыхperform: продолжить выполнение запросов до исчерпания списка. Выполнение может быть остановлено из передаваемой функции возвратом false.
Context — внутренняя структура, хранящая данные запроса, уже находящегося на исполнении. Доступ к ней может быть необходим в случае собственной реализации мультиплексирования запросов без использования MultiHandle.
SDK предоставляет интерфейсу встроенный набор корневых сертификатов TLS на случай, если curl не может обнаружить их в системе. Такая возможность предоставляет лучший контроль над сертификатами на случай, если российские корневые сертификаты не будут входить в стандартный набор.