andrey-tech / http-client-php
Простой НТТР(S) клиент на PHP7+ с троттлингом запросов и поддержкой маркера BOM в теле сообщения формата JSON
Installs: 68 073
Dependents: 3
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 2
Open Issues: 0
pkg:composer/andrey-tech/http-client-php
Requires
- php: >=7.0
- ext-curl: *
- ext-json: *
README
Простой НТТР(S) клиент на PHP7+ с троттлингом запросов, поддержкой маркера BOM в теле сообщения формата JSON и выводом отладочной информации о запросах и ответах в STDOUT.
Содержание
Требования
- PHP >= 7.0;
- Произвольный автозагрузчик классов, реализующий стандарт PSR-4.
Установка
Установка через composer:
$ composer require andrey-tech/http-client-php:"^3.0"
или добавить
"andrey-tech/http-client-php": "^3.0"
в секцию require файла composer.json.
Класс HTTP
Класс \App\HTTP\НТТР обеспечивает:
- выполнение запросов по протоколу НТТР(S);
- настраиваемый троттлинг запросов;
- проверку SSL/TLS-сертификата сервера c возможностью ее отключения;
- удаление или добавление маркера ВОМ в тело сообщений формата 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 | Добавлять маркер ВОМ 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 файла 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] <=== RESPONSE 0.9269s (200)
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sun, 14 Jun 2020 13:09:33 GMT
Etag: "3147526947"
Expires: Sun, 21 Jun 2020 13:09:33 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: EOS (vny/0453)
Content-Length: 1256
<!doctype html>
<html>
<head>
    <title>Example Domain</title>
</head>
<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
Автор
© 2019-2022 andrey-tech
Лицензия
Данная библиотека распространяется на условиях лицензии MIT.