{"id":15579260,"url":"https://github.com/andrey-tech/http-client-php","last_synced_at":"2025-04-24T01:28:31.842Z","repository":{"id":56948088,"uuid":"272233216","full_name":"andrey-tech/http-client-php","owner":"andrey-tech","description":"Простой НТТР(S) клиент на PHP7+ с троттлингом запросов, поддержкой маркера BOM в теле сообщения формата JSON и выводом отладочной информации в STDOUT.","archived":false,"fork":false,"pushed_at":"2025-01-26T13:00:38.000Z","size":339,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T18:07:22.008Z","etag":null,"topics":["bom","client","http","http-client","https","https-client","json","php","throttling"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrey-tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-14T15:48:00.000Z","updated_at":"2025-01-26T13:00:42.000Z","dependencies_parsed_at":"2024-01-15T19:17:44.975Z","dependency_job_id":"725b4f01-b30c-45e1-a4b2-1302b636677e","html_url":"https://github.com/andrey-tech/http-client-php","commit_stats":{"total_commits":14,"total_committers":2,"mean_commits":7.0,"dds":0.1428571428571429,"last_synced_commit":"86e8de1c3bcc2c90580e41da8f5d1e8425435111"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fhttp-client-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fhttp-client-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fhttp-client-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrey-tech%2Fhttp-client-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrey-tech","download_url":"https://codeload.github.com/andrey-tech/http-client-php/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250543461,"owners_count":21447904,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bom","client","http","http-client","https","https-client","json","php","throttling"],"created_at":"2024-10-02T19:14:17.104Z","updated_at":"2025-04-24T01:28:31.817Z","avatar_url":"https://github.com/andrey-tech.png","language":"PHP","readme":"# HTTP(S) Client PHP\n\nПростой НТТР(S) клиент на PHP7+ с троттлингом запросов, поддержкой маркера BOM в теле сообщения формата JSON и выводом отладочной информации о запросах и ответах в STDOUT.  \n\n[![Latest Stable Version](https://poser.pugx.org/andrey-tech/http-client-php/v)](https://packagist.org/packages/andrey-tech/http-client-php)\n[![Total Downloads](https://poser.pugx.org/andrey-tech/http-client-php/downloads)](https://packagist.org/packages/andrey-tech/http-client-php)\n[![License](https://poser.pugx.org/andrey-tech/http-client-php/license)](https://packagist.org/packages/andrey-tech/http-client-php)\n\n# Содержание\n\n\u003c!-- MarkdownTOC levels=\"1,2,3,4,5,6\" autoanchor=\"true\" autolink=\"true\" --\u003e\n\n- [Требования](#%D0%A2%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)\n- [Установка](#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)\n- [Класс `HTTP`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-http)\n    - [Методы класса](#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0)\n    - [Параметры](#%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B)\n    - [Пример](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80)\n- [Автор](#%D0%90%D0%B2%D1%82%D0%BE%D1%80)\n- [Лицензия](#%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)\n\n\u003c!-- /MarkdownTOC --\u003e\n\n\u003ca id=\"%D0%A2%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F\"\u003e\u003c/a\u003e\n## Требования\n\n- PHP \u003e= 7.0;\n- Произвольный автозагрузчик классов, реализующий стандарт [PSR-4](https://www.php-fig.org/psr/psr-4/).\n\n\u003ca id=\"%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0\"\u003e\u003c/a\u003e\n## Установка\n\nУстановка через composer:\n```\n$ composer require andrey-tech/http-client-php:\"^3.0\"\n```\n\nили добавить\n\n```\n\"andrey-tech/http-client-php\": \"^3.0\"\n```\n\nв секцию require файла composer.json.\n\n\u003ca id=\"%D0%9A%D0%BB%D0%B0%D1%81%D1%81-http\"\u003e\u003c/a\u003e\n## Класс `HTTP`\n\nКласс `\\App\\HTTP\\НТТР` обеспечивает:\n\n- выполнение запросов по протоколу НТТР(S);\n- настраиваемый троттлинг запросов;\n- проверку SSL/TLS-сертификата сервера c возможностью ее отключения;\n- удаление или добавление [маркера ВОМ](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;\n- вывод отладочной информации о запросах и ответах в STDOUT.\n\nПри возникновении ошибок выбрасывается исключение класса `\\App\\HTTP\\HTTPException`.\n\n\u003ca id=\"%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0\"\u003e\u003c/a\u003e\n### Методы класса\n\n- `__construct()` Конструктор класса.\n- `request(string $url, string $method = 'GET', array $params = [], array $requestHeaders = [], array $curlOptions = []) :?array`  \n    Отправляет запрос по протоколу HTTP(S). Возвращает декодированный ответ сервера или `null` при возникновении ошибки cURL.\n    + `$url` - URL запроса;\n    + `$method` - метод запроса;\n    + `$params` - параметры запроса;\n    + `$curlOptions` - дополнительные параметры для cURL.\n- `isSuccess(array $successStatusCodes = []) :bool` Возвращает статус успешности выполнения запроса.\n    + `$successStatisCodes` Коды статуса НТТР, соответствующие успешному выполнению запроса. Если не передан, то используется значение по умолчанию, установленное в свойстве `$successStatusCodes`.\n- `getHTTPCode() :int` Возвращает код статуса HTTP для последнего запроса.\n- `getResponse() :?string` Возвращает тело последнего ответа в сыром виде.\n- `getResponseHeaders() :array` Возвращает заголовки последнего ответа.\n- `getCurlInfo() :array` Возвращает информацию о последней операции cURL.\n\n\u003ca id=\"%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B\"\u003e\u003c/a\u003e\n### Параметры\n\nДополнительные параметры устанавливаются через публичные свойства объекта класса `\\App\\HTTP\\HTTP`:\n\nСвойство                | По умолчанию            | Описание\n----------------------- | ----------------------- | --------\n`$debugLevel`           | `\\App\\HTTP\\HTTP::DEBUG_NONE` | Устанавливает уровень вывода отладочной информации о запросах в STDOUT (битовая маска, составляемая из значений DEBUG_NONE, DEBUG_URL, DEBUG_HEADERS, DEBUG_CONTENT)\n`$throttle`             | 0                       | Максимальное число HTTP запросов в секунду (0 - троттлинг отключен)\n`$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\n`$useCookies`           | false                   | Использовать cookies в запросах\n`$cookieFile`           | 'temp/cookies.txt'      | Путь к файлу для хранения cookies\n`$verifySSLCertificate` | true                    | Включить проверку SSL/TLS-сертификата сервера\n`$SSLCertificateFile`   | 'cacert.pem'            | Устанавливает файл SSL/TLS-сертификатов X.509 корневых удостоверяющих центров (CA) в формате РЕМ (установка в null означает использовать файл, указанный в параметре [curl.cainfo](https://www.php.net/manual/ru/curl.configuration.php) файла php.ini)\n`$userAgent`            | 'HTTP-client/3.x.x'     | Устанавливает НТТР заголовок UserAgent в запросах\n`$curlConnectTimeout`   | 60                      | Устанавливает таймаут соединения, секунды\n`$curlTimeout`          | 60                      | Устанавливает таймаут обмена данными, секунды\n`$successStatusCodes`   | [ 200 ]                 | Коды статуса НТТР, соответствующие успешному выполнению запроса\n\n\u003ca id=\"%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80\"\u003e\u003c/a\u003e\n### Пример\n\n```php\nuse App\\HTTP\\HTTP;\nuse App\\HTTP\\HTTPException;\n\ntry {\n    // Создаем клиента\n    $http = new HTTP();\n\n    // Устанавливаем максимальный уровень вывода отладочных сообщений в STDOUT\n    $http-\u003edebugLevel = HTTP::DEBUG_URL |  HTTP::DEBUG_HEADERS | HTTP::DEBUG_CONTENT;\n\n    // Устанавливаем троттлинг запросов на уровне не более 1 запроса в 2 секунды\n    $http-\u003ethrottle = 0.5;\n\n    // Устанавливаем таймаут соединения в 30 секунд\n    $http-\u003ecurlConnectTimeout = 30;\n\n    // Устанавливаем таймаут обмена данными в 30 секунд\n    $http-\u003ecurlTimeout = 30;\n\n    // Отправляем POST запрос\n    $response = $http-\u003erequest(\n        $url            = 'https://www.example.com',\n        $method         = 'POST',\n        $params         = [ 'username' =\u003e 'ivan@example.com', 'password' =\u003e '1234567890' ],\n        $requestHeaders = [ 'Content-Type: application/json' ]\n    );\n\n    // Проверяем НТТР статус ответа\n    if (! $http-\u003eisSuccess()) {\n        $httpCode = $http-\u003egetHTTPCode();\n        $response = $http-\u003egetResponse();\n        throw new HTTPException(\"HTTP {$httpCode}: {$response}\");\n    }\n\n    print_r($response);\n\n} catch (HTTPException $e) {\n    printf('Ошибка (%d): %s' . PHP_EOL, $e-\u003egetCode(), $e-\u003egetMessage());\n}\n```\n\nПример отладочных сообщений:\n\n```\n[1] ===\u003e POST https://www.example.com\nPOST / HTTP/1.1\nHost: www.example.com\nUser-Agent: HTTP-client/3.x.x\nAccept: */*\nContent-Type: application/json\nContent-Length: 55\n\n{\"username\":\"ivan@example.com\",\"password\":\"1234567890\"}\n\n[1] \u003c=== RESPONSE 0.9269s (200)\nHTTP/1.1 200 OK\nAccept-Ranges: bytes\nCache-Control: max-age=604800\nContent-Type: text/html; charset=UTF-8\nDate: Sun, 14 Jun 2020 13:09:33 GMT\nEtag: \"3147526947\"\nExpires: Sun, 21 Jun 2020 13:09:33 GMT\nLast-Modified: Thu, 17 Oct 2019 07:18:26 GMT\nServer: EOS (vny/0453)\nContent-Length: 1256\n\n\u003c!doctype html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n    \u003ctitle\u003eExample Domain\u003c/title\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cdiv\u003e\n    \u003ch1\u003eExample Domain\u003c/h1\u003e\n    \u003cp\u003eThis domain is for use in illustrative examples in documents. You may use this\n    domain in literature without prior coordination or asking for permission.\u003c/p\u003e\n    \u003cp\u003e\u003ca href=\"https://www.iana.org/domains/example\"\u003eMore information...\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n\u003ca id=\"%D0%90%D0%B2%D1%82%D0%BE%D1%80\"\u003e\u003c/a\u003e\n## Автор\n\n© 2019-2022 andrey-tech\n\n\u003ca id=\"%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F\"\u003e\u003c/a\u003e\n## Лицензия\n\nДанная библиотека распространяется на условиях лицензии [MIT](./LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrey-tech%2Fhttp-client-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrey-tech%2Fhttp-client-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrey-tech%2Fhttp-client-php/lists"}