PHPackages                             andrey-tech/http-client-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. andrey-tech/http-client-php

ActiveLibrary[HTTP &amp; Networking](/categories/http)

andrey-tech/http-client-php
===========================

Простой НТТР(S) клиент на PHP7+ с троттлингом запросов и поддержкой маркера BOM в теле сообщения формата JSON

3.0.9(4mo ago)375.8k↓14.9%23MITPHPPHP &gt;=7.0

Since Jun 14Pushed 4mo ago2 watchersCompare

[ Source](https://github.com/andrey-tech/http-client-php)[ Packagist](https://packagist.org/packages/andrey-tech/http-client-php)[ Docs](https://github.com/andrey-tech/http-client-php)[ RSS](/packages/andrey-tech-http-client-php/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)DependenciesVersions (15)Used By (3)

HTTP(S) Client PHP
==================

[](#https-client-php)

Простой НТТР(S) клиент на PHP7+ с троттлингом запросов, поддержкой маркера BOM в теле сообщения формата JSON и выводом отладочной информации о запросах и ответах в STDOUT.

[![Latest Stable Version](https://camo.githubusercontent.com/cb54935fa95d85c5de619a7eb3031e065714ae2c1da957a3415e1e5ce7eb8a38/68747470733a2f2f706f7365722e707567782e6f72672f616e647265792d746563682f687474702d636c69656e742d7068702f76)](https://packagist.org/packages/andrey-tech/http-client-php)[![Total Downloads](https://camo.githubusercontent.com/af29ab7c30b6affeaf25471410dc851ff14a710d6b42d7214bad2d1a03a173bf/68747470733a2f2f706f7365722e707567782e6f72672f616e647265792d746563682f687474702d636c69656e742d7068702f646f776e6c6f616473)](https://packagist.org/packages/andrey-tech/http-client-php)[![License](https://camo.githubusercontent.com/0cac43cc6e4375d016d69ede88a35b6f8952823d3647bea1d5a70a3f0ac79aad/68747470733a2f2f706f7365722e707567782e6f72672f616e647265792d746563682f687474702d636c69656e742d7068702f6c6963656e7365)](https://packagist.org/packages/andrey-tech/http-client-php)

Содержание
==========

[](#содержание)

- [Требования](#%D0%A2%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
- [Установка](#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
- [Класс `HTTP`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-http)
    - [Методы класса](#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0)
    - [Параметры](#%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B)
    - [Пример](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80)
- [Автор](#%D0%90%D0%B2%D1%82%D0%BE%D1%80)
- [Лицензия](#%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)

Требования
----------

[](#требования)

- PHP &gt;= 7.0;
- Произвольный автозагрузчик классов, реализующий стандарт [PSR-4](https://www.php-fig.org/psr/psr-4/).

Установка
---------

[](#установка)

Установка через composer:

```
$ composer require andrey-tech/http-client-php:"^3.0"

```

или добавить

```
"andrey-tech/http-client-php": "^3.0"

```

в секцию require файла composer.json.

Класс `HTTP`
------------

[](#класс-http)

Класс `\App\HTTP\НТТР` обеспечивает:

- выполнение запросов по протоколу НТТР(S);
- настраиваемый троттлинг запросов;
- проверку SSL/TLS-сертификата сервера c возможностью ее отключения;
- удаление или добавление [маркера ВОМ](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2) в тело сообщений формата JSON;
- вывод отладочной информации о запросах и ответах в STDOUT.

При возникновении ошибок выбрасывается исключение класса `\App\HTTP\HTTPException`.

### Методы класса

[](#методы-класса)

- `__construct()` Конструктор класса.
- `request(string $url, string $method = 'GET', array $params = [], array $requestHeaders = [], array $curlOptions = []) :?array`
    Отправляет запрос по протоколу HTTP(S). Возвращает декодированный ответ сервера или `null` при возникновении ошибки cURL.
    - `$url` - URL запроса;
    - `$method` - метод запроса;
    - `$params` - параметры запроса;
    - `$curlOptions` - дополнительные параметры для cURL.
- `isSuccess(array $successStatusCodes = []) :bool` Возвращает статус успешности выполнения запроса.
    - `$successStatisCodes` Коды статуса НТТР, соответствующие успешному выполнению запроса. Если не передан, то используется значение по умолчанию, установленное в свойстве `$successStatusCodes`.
- `getHTTPCode() :int` Возвращает код статуса HTTP для последнего запроса.
- `getResponse() :?string` Возвращает тело последнего ответа в сыром виде.
- `getResponseHeaders() :array` Возвращает заголовки последнего ответа.
- `getCurlInfo() :array` Возвращает информацию о последней операции cURL.

### Параметры

[](#параметры)

Дополнительные параметры устанавливаются через публичные свойства объекта класса `\App\HTTP\HTTP`:

СвойствоПо умолчаниюОписание`$debugLevel``\App\HTTP\HTTP::DEBUG_NONE`Устанавливает уровень вывода отладочной информации о запросах в STDOUT (битовая маска, составляемая из значений DEBUG\_NONE, DEBUG\_URL, DEBUG\_HEADERS, DEBUG\_CONTENT)`$throttle`0Максимальное число HTTP запросов в секунду (0 - троттлинг отключен)`$addBOM`falseДобавлять [маркер ВОМ](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2) UTF-8 (EFBBBF) к запросам в формате JSON`$useCookies`falseИспользовать cookies в запросах`$cookieFile`'temp/cookies.txt'Путь к файлу для хранения cookies`$verifySSLCertificate`trueВключить проверку SSL/TLS-сертификата сервера`$SSLCertificateFile`'cacert.pem'Устанавливает файл SSL/TLS-сертификатов X.509 корневых удостоверяющих центров (CA) в формате РЕМ (установка в null означает использовать файл, указанный в параметре [curl.cainfo](https://www.php.net/manual/ru/curl.configuration.php) файла php.ini)`$userAgent`'HTTP-client/3.x.x'Устанавливает НТТР заголовок UserAgent в запросах`$curlConnectTimeout`60Устанавливает таймаут соединения, секунды`$curlTimeout`60Устанавливает таймаут обмена данными, секунды`$successStatusCodes`\[ 200 \]Коды статуса НТТР, соответствующие успешному выполнению запроса

### Пример

[](#пример)

```
use App\HTTP\HTTP;
use App\HTTP\HTTPException;

try {
    // Создаем клиента
    $http = new HTTP();

    // Устанавливаем максимальный уровень вывода отладочных сообщений в STDOUT
    $http->debugLevel = HTTP::DEBUG_URL |  HTTP::DEBUG_HEADERS | HTTP::DEBUG_CONTENT;

    // Устанавливаем троттлинг запросов на уровне не более 1 запроса в 2 секунды
    $http->throttle = 0.5;

    // Устанавливаем таймаут соединения в 30 секунд
    $http->curlConnectTimeout = 30;

    // Устанавливаем таймаут обмена данными в 30 секунд
    $http->curlTimeout = 30;

    // Отправляем POST запрос
    $response = $http->request(
        $url            = 'https://www.example.com',
        $method         = 'POST',
        $params         = [ 'username' => 'ivan@example.com', 'password' => '1234567890' ],
        $requestHeaders = [ 'Content-Type: application/json' ]
    );

    // Проверяем НТТР статус ответа
    if (! $http->isSuccess()) {
        $httpCode = $http->getHTTPCode();
        $response = $http->getResponse();
        throw new HTTPException("HTTP {$httpCode}: {$response}");
    }

    print_r($response);

} catch (HTTPException $e) {
    printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}
```

Пример отладочных сообщений:

```
[1] ===> POST https://www.example.com
POST / HTTP/1.1
Host: www.example.com
User-Agent: HTTP-client/3.x.x
Accept: */*
Content-Type: application/json
Content-Length: 55

{"username":"ivan@example.com","password":"1234567890"}

[1]
