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>";
Сообщение не промодерировано, возможны ошибки и неточности.
|
||
Пример дадаты
| ||
Oleg Danilkin
|
||||
Для наглядности сразу с примера кода.
По итогу отправляются два запроса поочередно, для первого устанавливается заголовок "Content-Length: 5", для второго, аналогично, "Content-Length: 5", хотя ожидается 9... Можно, конечно, между запросами сделать "setHeader" для "ручной" установки, НО... Получается, что в приведенном примере мы отправляем заголовок несоответствующий реальном размеру тела запроса, а это уже неправильно. Было бы логичнее не проверять перед отправкой наличие установленного заголовка, а принудительно его пересчитывать при каждой отправке. Код из исходника /bitrix/modules/main/lib/web/httpclient.php:760
| ||||
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.