{"id":20112451,"url":"https://github.com/andy87/curl-requester","last_synced_at":"2025-03-02T18:42:27.634Z","repository":{"id":63618192,"uuid":"423036162","full_name":"andy87/curl-requester","owner":"andy87","description":"Многофункциональный класс для отправки запросов с помощью функций cURL.","archived":false,"fork":false,"pushed_at":"2022-12-13T22:27:19.000Z","size":197,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-13T06:06:22.606Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andy87.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-10-31T02:37:36.000Z","updated_at":"2024-01-12T18:23:51.000Z","dependencies_parsed_at":"2023-01-28T15:31:46.992Z","dependency_job_id":null,"html_url":"https://github.com/andy87/curl-requester","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fcurl-requester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fcurl-requester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fcurl-requester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fcurl-requester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andy87","download_url":"https://codeload.github.com/andy87/curl-requester/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241556883,"owners_count":19981876,"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":[],"created_at":"2024-11-13T18:20:23.312Z","updated_at":"2025-03-02T18:42:27.615Z","avatar_url":"https://github.com/andy87.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/andy87/curl-requester/main/logo.png\"\u003e\n    \u003ch1 align=\"center\"\u003ecurl-requester\u003c/h1\u003e\n\u003c/p\u003e\n\nМногофункциональный класс для отправки запросов с помощью функций cURL.\n\n***Решаемые задачи/цели:*** \n\u003cbr\u003e 1. Единая точка входа для отправки запросов\n\u003cbr\u003e 2. Легко использовать (простой интерфейс и настройка)\n\u003chr\u003e\n\n## Пример кода использования.\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n//GET запрос\n$resp = $curl-\u003eget( 'vk.com/id806034' )-\u003eresponse(); // string\n\n// Получение ответа в качестве объекта с запросом методом POST\n$respObject = $curl-\u003epost( 'vk.com/user/add', [ 'name' =\u003e 'and_y87' ])-\u003erun()-\u003easObject(); // object\n\n// Имитация запроса методом PATCH с получением тестовых данных\n$response = $curl-\u003epatch( 'vk.com/user/get', ['id' =\u003e 806034])\n    -\u003esetTestResponse('{\"name\" : \"Андрей\", \"do\" : \"code\"}')\n    -\u003erun();\n\n//Получение данных\n$respArray  = $response-\u003easArray(); // ['name' =\u003e 'Андрей', 'do'=\u003e 'code']\n$http_code  = $response-\u003ehttpCode;\n```\n\n\u003chr\u003e\n\n### Mapping\nПеременные в примерах кода:\n - ***$response*** - объект класса `andy87\\curl_requester\\entity\\Response`\n - ***$request*** - объект класса `andy87\\curl_requester\\entity\\Request`\n - ***$query*** - объект класса `andy87\\curl_requester\\entity\\Query`\n\n### Детальнее\nДоступно 6 методов/запросов: GET, POST, PUT, PATCH, HEAD, DELETE  \nВсе методы вызываются идентично.  \n1. **конструктор** - принимает аргументы:\n- *string* **url** - адрес на который будет осуществлён запрос\n- *array* **params** - параметры запроса *(не обязательный)*\n \n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n/** @var andy87\\curl_requester\\entity\\Response $curl */\n\n$request = $curl-\u003eget('https://andy87.ru');\n\n$request = $curl-\u003epost('www.andy87.ru/search', [ 'text' =\u003e 'php' ]);\n```\n\n2. Ответ(***response***).  \nВозможно получить ответ несколькими способами:\n- Преобразует ответ в объект( object )\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$respObject = $curl-\u003eget('www.andy87.ru/data')-\u003easObject(); // object\n```\n- Преобразует ответ в массив( array )\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$respArray = $curl-\u003eget('www.andy87.ru/data')-\u003easArray(); // array\n```\n- Текст ( string )\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n/** @var andy87\\curl_requester\\entity\\Response $response */\n\n$resp = $curl-\u003eget('www.andy87.ru')-\u003eresponse(); // string\n\n//Аналог\n\n$response = $curl-\u003eget('www.andy87.ru')-\u003erun(); // Вернёт объект класса `Response` (информацию об ответе)\n$resp     = $response-\u003eresponse;\n\n//Аналог(краткая запись)\n$resp = $curl-\u003eget('www.andy87.ru')-\u003erun()-\u003eresponse;\n$resp = $curl-\u003eget('www.andy87.ru')-\u003eresponse();\n```\n\n### Информация об ответе.  \n`Response::class`  \n- ***response*** - ответ на запрос\n- ***httpCode*** - код ответа на запрос\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$response  = $curl-\u003epost( 'www.andy87.ru')-\u003erun(); //Вернёт объект класса `Request` (данные запроса).\n\n$respArray = $response-\u003easArray(); // ['name' =\u003e 'Андрей', 'do'=\u003e 'code']\n$httpCode  = $response-\u003ehttpCode; //Код ответа сервера\n\n$query = $response-\u003egetQuery(); //Вернёт объект класса `Query` (информацию о запросе.)\n```\n\n### Информация о запросе.  \n`Query::class`  \n - **method** - метод запроса\n - **url** - адрес запроса\n - **postFields** - данные запроса\n - **headers** - Заголовки запроса\n - **curlOptions** - опции cURL запроса\n - **response** - ответ на запрос\n - **httpCode** - код ответа на запрос\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n/** @var andy87\\curl_requester\\entity\\Query $query */\n\n$query = $curl-\u003epost( 'www.andy87.ru')-\u003erun()-\u003egetQuery();\n\n$method     = $query-\u003emethod;\n$url        = $query-\u003eurl;\n$headers    = $query-\u003eheaders;\n$postFields = $query-\u003epostFields;\n$curlOptions= $query-\u003ecurlOptions;\n$response   = $query-\u003eresponse;\n$http_code  = $query-\u003ehttpCode;\n\n$isPost     = $query-\u003eisPost();\n//... и т.д. ( isGet(), isPut() ... )\n```\n\n\u003chr\u003e\n\n## Дополнительные возможности\n\n### Вернуть тестовые данные\n- **setTestResponse( *string* $response, *int* $http_code )** - запрос не выполнится и вернётся заданный ответ.  \n  - *string* **$response** - имитируемый ответ\n  - *int* **$http_code** - имитируемый код ответа ( По умолчанию 200 )\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$resp = $curl-\u003epost('www.crm.ru/get-user', ['id' =\u003e 123])\n    -\u003esetTestResponse(json_encode(['name'=\u003e'Андрей', 'do'=\u003e'code']), 302 )\n    -\u003eresponse();\n```\n### Расширить/дополнить заголовки запроса\n- **addHeaders( *array* $array )** - добавляемые заголовки\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$resp = $curl-\u003epost('www.crm.ru/get-user', ['id' =\u003e 123])\n    -\u003eaddHeaders(['Content-Type: application/json'])\n    -\u003eresponse();\n```\n### Подготовленные данные\n- **prepareParams( *string* $postField )** - данные для запроса не будут проходить обработку [http_build_query()](https://www.php.net/manual/ru/function.http-build-query.php) они считаются уже подготовленными для запроса\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$resp = $curl-\u003epost( 'www.vk.com/806034')\n    -\u003eprepareParams( http_build_query(['id' =\u003e 123]) )\n    -\u003eresponse();\n    \n// Аналог\n$params = http_build_query(['id' =\u003e 123]);\n$resp   = $curl-\u003epost( 'www.vk.com/806034', $params )-\u003eprepareParams()-\u003eresponse();\n```\n### Использование Basic авторизации\n- **setBasicAuth( *string* $token )** - Добавляет в заголовки  \n`Authorization: Basic eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9`\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$resp = $curl-\u003epost('www.crm.ru/get-user', ['id' =\u003e 123])\n    -\u003esetBasicAuth('eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9')\n    -\u003eresponse();\n```\n### Дополнительные cURL опции\n- **addCurlOptions( *array* $array )** - дополнительные опции cURL для [curl_setopt()](https://www.php.net/manual/ru/function.curl-setopt.php)\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$resp = $curl-\u003epost('www.crm.ru/get-user/delete', ['id' =\u003e 123])\n    -\u003eaddCurlOptions([ CURLOPT_FOLLOWLOCATION =\u003e true])\n    -\u003eresponse();\n```\n### Использование Cookie\n- **useCookie( *string* $cookie, *string* $path )** - использование cookie. Задаются:  \n`CURLOPT_COOKIE`  \n`CURLOPT_COOKIEJAR`  \n`CURLOPT_COOKIEFILE`  \n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$resp = $curl-\u003epost('www.crm.ru/get-user', ['id' =\u003e 123])\n    -\u003euseCookie('cookiename=cookievalue', '/tmp/cookies.txt')\n    -\u003eresponse();\n```\n\n### Отключение проверки SSL\n- **disableSSL()** - отключение проверки SSL. Задаются:  \n`CURLOPT_SSL_VERIFYPEER =\u003e false`  \n`CURLOPT_SSL_VERIFYHOST =\u003e false`  \n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$resp = $curl-\u003epost( 'www.crm.ru/get-user', ['id' =\u003e 123])\n    -\u003edisableSSL()\n    -\u003eresponse();\n```\n### Разрешение редиректа\n- **enableRedirect()** - разрешение на редирект, если ответ сервера требует редиректа. Задаётся:  \n`CURLOPT_FOLLOWLOCATION =\u003e true`\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$resp = $curl-\u003epost( 'www.vk.com/806034')\n    -\u003eenableRedirect()\n    -\u003eresponse();\n```\n\n### Получение расширенной информации по запросу. \n- **addCurlInfo( *array* $curl_info )** - Дополняет список информации по запросу которую надо получить\n```php\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$query = $curl-\u003epost('www.vk.com/806034')\n    -\u003eaddCurlInfo([CURLINFO_EFFECTIVE_URL]) // Добавление необходимой информации к ответу\n    -\u003erun()\n    -\u003egetQuery();\n\n$last_url = $query-\u003einfo[ CURLINFO_EFFECTIVE_URL ]; //Получение информации \n```\n### Установка event функций\n- **setEvent( *string* $event, *callable* $function )** - callback функция, которая будет вызвана в event\n  - *string* ***$event*** - ключ события. Доступны:  \n    - **Request**::***EVENT_RUN*** - до запроса и до инициализации resource cURL\n    - **Request**::***EVENT_BEFORE_REQUEST*** - до запроса, после инициализации resource cURL\n    - **Request**::***EVENT_AFTER_REQUEST*** - после запроса, после инициализации resource cURL\n  - *callable* ***$function*** - вызываемая функция\n```php\nuse andy87\\curl_requester\\entity\\Query\n\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$request = $curl-\u003epost('www.vk.com/806034');\n//пример: задать некий callBack после запроса\n$request-\u003esetEvent(\n    Request::EVENT_AFTER_REQUEST, \n    function ( Query $query, $curlHandler )\n    {\n      // some code\n    }\n);\n\n$resp = $request-\u003erun()-\u003eresponse;\n```\n### Установка callBack функции\n- **setCallback( *callable* $callback )** - функция( **Request**::***EVENT_AFTER_REQUEST*** ), которая будет вызвана сразу после формирования ответа от сервера и до закрытия [curlHandler](https://www.php.net/manual/ru/book.curl.php)\n```php\nuse andy87\\curl_requester\\entity\\Query\n\n/** @var andy87\\curl_requester\\Curl $curl */\n\n$request = $curl-\u003epost('www.vk.com/806034');\n\n$request-\u003esetCallback(function ( Query $query, $curlHandler )\n{\n    if ( $query-\u003ehttpCode !== Query::OK )\n    {\n        $errors = curl_error( $curlHandler );\n        \n        curl_close( $curlHandler );\n        \n        exit( $errors );\n    }\n});\n\n$resp = $request-\u003erun()-\u003eresponse;\n```\n\n\u003chr\u003e\n\n### Собственная реализация [cURL](https://www.php.net/manual/ru/book.curl.php) через Request \n```php\nuse andy87\\curl_requester\\entity\\Request\n\n$ch = Request::createCurlHandler( 'www.vk.com/806034', [\n    CURLOPT_RETURNTRANSFER  =\u003e true,\n    CURLOPT_POST            =\u003e 1,\n    CURLOPT_HTTPHEADER      =\u003e [ 'some headers' ],\n    CURLOPT_POSTFIELDS      =\u003e http_build_query([ 'some params' ])\n]);\n\n$resp = curl_exec( $ch );\n\ncurl_close($ch);\n\n// Аналог(кратная запись)\n$resp = Request::send( 'www.vk.com/806034', [\n    CURLOPT_RETURNTRANSFER  =\u003e true,\n    CURLOPT_POST            =\u003e 1,\n    CURLOPT_HTTPHEADER      =\u003e [ 'some headers' ],\n    CURLOPT_POSTFIELDS      =\u003e http_build_query([ 'some params' ])\n]);\n```\n\n\u003chr\u003e\n\n# Установка\n\n## Зависимости\n- php ( \u003e= 7.4 )\n- ext-curl\n- ext-json\n- ext-mbstring\n\n## composer.json\nУстановка с помощью [composer](https://getcomposer.org/download/)  \n\nДобавить в `composer.json`  \n\u003csmall\u003erequire\u003c/small\u003e\n```\n\"require\": {\n    ...\n    \"andy87/curl-requester\" : \"dev-main\"\n},\n```\n\u003csmall\u003erepositories\u003c/small\u003e\n```\n\"repositories\": [\n    ...,\n    {\n      \"url\": \"git@github.com:andy87/curl-requester.git\",\n      \"type\": \"vcs\"\n    }\n]\n```\n\n\nЕсли **composer** не установлен локально, то скачать **composer.phar** с \u003ca href=\"https://getcomposer.org/download/\"\u003eофициального сайта\u003c/a\u003e в корневую дирекорию пргоекта.\n\nВыполнить в консоле команду, если **composer** локально:\n\n| установлен        | не установлкн               |\n|-------------------|-----------------------------|\n| `composer update` | `php composer.phar update` |\n| `composer dump`   | `php composer.phar dump` |\n\n\n\n\n## Log\n* ***1.3.5***\n  * Add: directory examples\n  * Update:\n    * `Request` \n      * edit: createCurlHandler()\n      * add: send()\n    * ReadME\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandy87%2Fcurl-requester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandy87%2Fcurl-requester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandy87%2Fcurl-requester/lists"}