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_GETHttpClient::HTTP_POSTHttpClient::HTTP_PUTHttpClient::HTTP_HEADHttpClient::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');