Документация для разработчиков
Темная тема

HttpClient

HttpClient – класс для работы с HTTP. Класс работает через сокеты. Класс принимает опции по умолчанию из настроек конфигурации http_client_options файла /bitrix/.settings.php.

С версии main 23.0.0 в HttpClient добавлена поддержка PSR-18. Помимо PSR, клиент работает в legacy-режиме, поддерживает очереди асинхронных запросов и библиотеку CURL.

Метод Описание С версии
disableSslVerification Метод запрещает верификацию ssl сертификата. 15.5.9
download Метод скачивает и сохраняет файлы.
get Метод выполняет GET запрос.
getCharset Метод возвращает кодировку контента ответа.
getContentType Метод возвращает тип контента ответа.
getCookies Метод возвращает отпарсенный HTTP ответ cookies
getEffectiveUrl Метод возвращает URL последнего редиректа или первначалный URL.
getError Метод возвращает массив ошибок при неудаче
getHeaders Метод возвращает отпарсенные заголовки HTTP ответов.
getResult Метод возвращает строку сущности HTTP ответа.
getStatus Метод возвращает код статуса HTTP ответа.
head Метод выполняет HEAD запрос.
post Метод выполняет POST запрос.
query Метод выполняет HTTP запрос.
setAuthorization Метод устанавливает поле заголовка запроса аутентификации.
setCharset Метод устанавливает кодировку для тела объекта
setCompress Метод устанавливает опции компрессии.
setCookies Метод устанавливает массив cookies для HTTP запроса
setHeader Метод устанавливает поле заголовка HTTP запроса.
setOutputStream Метод устанавливает вывод ответа в поток вместо строкового результата.
setProxy Метод устанавливает HTTP прокси для запроса.
setRedirect Метод устанавливает опции редиректа.
setStreamTimeout Метод устанавливает поток сокетов для чтения таймаута.
setVersion Метод устанавливает версию HTTP протокола.
waitResponse Метод устанавливает опцию ожидания ответа.
destruct Метод закрывает соединение при уничтожении объекта.
Конструктор Метод создаёт новый объект класса.
setTimeout Метод устанавливает таймаут соединения.

Примеры

Пример настройки:

'http_client_options' =>
	array (
		'value' =>
			array (
				'redirect' => true,//делаем редиректы, если требуется
				'redirectMax' => 10,//но не более 10
				'version' => '1.1'//работаем по протоколу http 1.1
			),
		'readonly' => false,
	),

Правильность настроек, можно проверить так (должен быть выведен ваш массив):

use Bitrix\Main\Config\Configuration;
print_r(Configuration::getValue("http_client_options"));

use Bitrix\Main\Web\HttpClient;

$httpClient = new HttpClient();
$httpClient->setHeader('Content-Type', 'application/json', true);
$response = $httpClient->post('http://www.example.com', json_encode(array('x' => 1)));

use Bitrix\Main\Web\HttpClient;

$httpClient = new HttpClient();
$httpClient->download('http://www.example.com/robots.txt', $_SERVER['DOCUMENT_ROOT'].'/upload/my.txt');

use Bitrix\Main\Web\HttpClient; 
$url = "http://www.example.com"; // отсюда возьмется кука
$url2 = "http://www.example.com/form_request"; // адрес, куда посылать запрос
$post = "val1=true&val2=false"; // запрос строкой, либо массивом

$httpClient = new HttpClient(); 
$httpClient->query("GET", $url);
$cookie = $httpClient->getCookies()->toArray(); // Кука отдаются объектом -> впихнем ее в массив. 

echo "<pre>"; print_r($cookie); echo "</pre>";

$httpClient->setHeader('Content-Type','application/x-www-form-urlencoded'); 
$httpClient->setCookies($cookie); // Аргумент должен быть массивом!
$response = $httpClient->post($url2, $post);

echo "<pre>"; var_dump($response); echo "</pre>";


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
1
Алексей Мостовой
Сообщение не промодерировано, возможны ошибки и неточности.
Пример дадаты
Код
        $httpClient = new \Bitrix\Main\Web\HttpClient();
        $httpClient->setHeader("Content-Type", "application/json");
        $httpClient->setHeader("Accept", "application/json");
        $httpClient->setHeader("Authorization", "Token ВАШ_ТОКЕН");
        $url = "https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/party";
        $post = \Bitrix\Main\Web\Json::encode(["query" => 'сбербанк', "count" => 5]);
        $response = $httpClient->post($url, $post);
1
Oleg Danilkin
Для наглядности сразу с примера кода.

Код
$client = new \Bitrix\Main\Web\HttpClient();
$client->post('http://mysite.com/test', ['xx' => 'yy']);
$client->post('http://mysite.com/test', ['xxxx' => 'yyyy']);

По итогу отправляются два запроса поочередно, для первого устанавливается заголовок "Content-Length: 5", для второго, аналогично, "Content-Length: 5", хотя ожидается 9...
Можно, конечно, между запросами сделать "setHeader" для "ручной" установки, НО...

Получается, что в приведенном примере мы отправляем заголовок несоответствующий реальном размеру тела запроса, а это уже неправильно. Было бы логичнее не проверять перед отправкой наличие установленного заголовка, а принудительно его пересчитывать при каждой отправке.

Код из исходника /bitrix/modules/main/lib/web/httpclient.php:760
Код
if($entityBody <> '' || $method == self::HTTP_POST)
{
   //HTTP/1.0 requires Content-Length for POST
   if($this->requestHeaders->get("Content-Length") === null)
   {
      $this->setHeader("Content-Length", BinaryString::getLength($entityBody));
   }
}
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх