Полный цикл в digital

HTTP-клиент в Битрикс D7

Класс HttpClient является реализацией HTTP-клиента в Битрикс D7:

$httpClient = new \Bitrix\Main\Web\HttpClient();

Конструктор класса принимает необязательный массив опций:

// опции по умолчанию:
$options = array(
    // true, если нужно выполнять редиректы
    "redirect" => true,
    // Максимальное количество редиректов
    "redirectMax" => 5,
    // true - ждать ответа, false - отключаться после запроса
    "waitResponse" => true,
    // Таймаут соединения, сек
    "socketTimeout" => 30,
    // Таймаут чтения ответа, сек, 0 - без таймаута
    "streamTimeout" => 60,
    // версия HTTP (HttpClient::HTTP_1_0 или HttpClient::HTTP_1_1)
    "version" => HttpClient::HTTP_1_0,
    // адрес
    "proxyHost" => "",
    // порт
    "proxyPort" => "",
    // имя
    "proxyUser" => "",
    // пароль
    "proxyPassword" => "",
    // true - принимать gzip (Accept-Encoding: gzip)
    "compress" => false,
    // Кодировка тела для POST и PUT
    "charset" => "",
    // true - отключить проверку ssl (с 15.5.9)
    "disableSslVerification" => false,
);
$httpClient = new \Bitrix\Main\Web\HttpClient($options);

Опции можно установить не только массивом, но и сеттерами:

$httpClient = new \Bitrix\Main\Web\HttpClient();
// @param bool $followRedirects,  @param int $redirectMax(default null)
$httpClient->setRedirect($followRedirects, $redirectMax = null);
// @param bool $waitResponse
$httpClient->waitResponse($waitResponse);
// @param int $socketTimeout
$httpClient->setTimeout($socketTimeout);
// @param int $streamTimeout
$httpClient->setStreamTimeout($streamTimeout);
// @param string $version
$httpClient->setVersion($version);
// @param string $proxyHost, @param int $proxyPort(default null), @param string $proxyUser(default null), @param string $proxyPassword(default null)
$httpClient->setProxy($proxyHost, $proxyPort = null, $proxyUser = null, $proxyPassword = null);
// @param bool $compress
$httpClient->setCompress($compress);
// @param string $charset
$httpClient->setCharset($charset);
// @param bool $ disableSslVerification      
$httpClient->disableSslVerification();

С версии 16.0.14 опции по умолчанию также можно менять в файле настроек .settings.php в секции http_client_options:

'http_client_options' =>
array (
    'value' =>
        array (
            'redirect' => true,
            'redirectMax' => 3,
            //...
        ),
    'readonly' => false,
),

Выполнение запроса длинный вызов

Аргумент $method принимает метод запроса: GET, POST и т.д., можно использовать константы класса:

  • HttpClient::HTTP_GET
  • HttpClient::HTTP_POST
  • HttpClient::HTTP_PUT
  • HttpClient::HTTP_HEAD
  • HttpClient::HTTP_PATCH

В $entityBody передаём тело запроса.

$httpClient->query($method, $url, $entityBody = null);

Метод возвращает результат запроса — true или false.

Чтобы получить информацию об ответе, можно использовать методы:

// текст ответа
$httpClient->getResult();
// код статуса ответа
$httpClient->getStatus();
// Content-Type ответа
$httpClient->getContentType();
// реальный url ответа, т.е. после редиректов
$httpClient->getEffectiveUrl();
// объект Bitrix\Main\Web\HttpCookies
$httpClient->getCookies();
// объект Bitrix\Main\Web\HttpHeaders
$httpClient->getHeaders();
// массив ошибок
$httpClient->getError();

У объектов Bitrix\Main\Web\HttpCookies и Bitrix\Main\Web\HttpHeaders есть метод toArray() для получения массива cookies и заголовков соответственно.

Выполнение запроса короткий вызов

Вместо query можно использовать короткие вызовы в соответствии с методом запроса:

// возвращает тело ответа
$httpClient->get($url);
// возвращает тело ответа
$httpClient->post($url, $postData);
// возвращает объект Bitrix\Main\Web\HttpHeaders
$httpClient->head($url);

Скачивание файлов

Класс HttpClient позволяет скачивать файлы методом GET:

$httpClient->download('http://example.ru/file.pdf', Application::getDocumentRoot() . '/upload/example/document.pdf');
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!