PHPackages                             andy87/curl-requester - 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. andy87/curl-requester

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

andy87/curl-requester
=====================

Decorator/Builder for curl requests

20PHP

Since Dec 13Pushed 3y ago1 watchersCompare

[ Source](https://github.com/andy87/curl-requester)[ Packagist](https://packagist.org/packages/andy87/curl-requester)[ RSS](/packages/andy87-curl-requester/feed)WikiDiscussions main Synced 2d ago

READMEChangelogDependenciesVersions (1)Used By (0)

 [![](https://raw.githubusercontent.com/andy87/curl-requester/main/logo.png)](https://raw.githubusercontent.com/andy87/curl-requester/main/logo.png)

curl-requester
==============

[](#curl-requester)

Многофункциональный класс для отправки запросов с помощью функций cURL.

***Решаемые задачи/цели:***
 1. Единая точка входа для отправки запросов
 2. Легко использовать (простой интерфейс и настройка)

---

Пример кода использования.
--------------------------

[](#пример-кода-использования)

```
/** @var andy87\curl_requester\Curl $curl */

//GET запрос
$resp = $curl->get( 'vk.com/id806034' )->response(); // string

// Получение ответа в качестве объекта с запросом методом POST
$respObject = $curl->post( 'vk.com/user/add', [ 'name' => 'and_y87' ])->run()->asObject(); // object

// Имитация запроса методом PATCH с получением тестовых данных
$response = $curl->patch( 'vk.com/user/get', ['id' => 806034])
    ->setTestResponse('{"name" : "Андрей", "do" : "code"}')
    ->run();

//Получение данных
$respArray  = $response->asArray(); // ['name' => 'Андрей', 'do'=> 'code']
$http_code  = $response->httpCode;
```

---

### Mapping

[](#mapping)

Переменные в примерах кода:

- ***$response*** - объект класса `andy87\curl_requester\entity\Response`
- ***$request*** - объект класса `andy87\curl_requester\entity\Request`
- ***$query*** - объект класса `andy87\curl_requester\entity\Query`

### Детальнее

[](#детальнее)

Доступно 6 методов/запросов: GET, POST, PUT, PATCH, HEAD, DELETE
Все методы вызываются идентично.

1. **конструктор** - принимает аргументы:

- *string* **url** - адрес на который будет осуществлён запрос
- *array* **params** - параметры запроса *(не обязательный)*

```
/** @var andy87\curl_requester\Curl $curl */
/** @var andy87\curl_requester\entity\Response $curl */

$request = $curl->get('https://andy87.ru');

$request = $curl->post('www.andy87.ru/search', [ 'text' => 'php' ]);
```

2. Ответ(***response***).
    Возможно получить ответ несколькими способами:

- Преобразует ответ в объект( object )

```
/** @var andy87\curl_requester\Curl $curl */

$respObject = $curl->get('www.andy87.ru/data')->asObject(); // object
```

- Преобразует ответ в массив( array )

```
/** @var andy87\curl_requester\Curl $curl */

$respArray = $curl->get('www.andy87.ru/data')->asArray(); // array
```

- Текст ( string )

```
/** @var andy87\curl_requester\Curl $curl */
/** @var andy87\curl_requester\entity\Response $response */

$resp = $curl->get('www.andy87.ru')->response(); // string

//Аналог

$response = $curl->get('www.andy87.ru')->run(); // Вернёт объект класса `Response` (информацию об ответе)
$resp     = $response->response;

//Аналог(краткая запись)
$resp = $curl->get('www.andy87.ru')->run()->response;
$resp = $curl->get('www.andy87.ru')->response();
```

### Информация об ответе.

[](#информация-об-ответе)

`Response::class`

- ***response*** - ответ на запрос
- ***httpCode*** - код ответа на запрос

```
/** @var andy87\curl_requester\Curl $curl */

$response  = $curl->post( 'www.andy87.ru')->run(); //Вернёт объект класса `Request` (данные запроса).

$respArray = $response->asArray(); // ['name' => 'Андрей', 'do'=> 'code']
$httpCode  = $response->httpCode; //Код ответа сервера

$query = $response->getQuery(); //Вернёт объект класса `Query` (информацию о запросе.)
```

### Информация о запросе.

[](#информация-о-запросе)

`Query::class`

- **method** - метод запроса
- **url** - адрес запроса
- **postFields** - данные запроса
- **headers** - Заголовки запроса
- **curlOptions** - опции cURL запроса
- **response** - ответ на запрос
- **httpCode** - код ответа на запрос

```
/** @var andy87\curl_requester\Curl $curl */
/** @var andy87\curl_requester\entity\Query $query */

$query = $curl->post( 'www.andy87.ru')->run()->getQuery();

$method     = $query->method;
$url        = $query->url;
$headers    = $query->headers;
$postFields = $query->postFields;
$curlOptions= $query->curlOptions;
$response   = $query->response;
$http_code  = $query->httpCode;

$isPost     = $query->isPost();
//... и т.д. ( isGet(), isPut() ... )
```

---

Дополнительные возможности
--------------------------

[](#дополнительные-возможности)

### Вернуть тестовые данные

[](#вернуть-тестовые-данные)

- **setTestResponse( *string* $response, *int* $http\_code )** - запрос не выполнится и вернётся заданный ответ.
    - *string* **$response** - имитируемый ответ
    - *int* **$http\_code** - имитируемый код ответа ( По умолчанию 200 )

```
/** @var andy87\curl_requester\Curl $curl */

$resp = $curl->post('www.crm.ru/get-user', ['id' => 123])
    ->setTestResponse(json_encode(['name'=>'Андрей', 'do'=>'code']), 302 )
    ->response();
```

### Расширить/дополнить заголовки запроса

[](#расширитьдополнить-заголовки-запроса)

- **addHeaders( *array* $array )** - добавляемые заголовки

```
/** @var andy87\curl_requester\Curl $curl */

$resp = $curl->post('www.crm.ru/get-user', ['id' => 123])
    ->addHeaders(['Content-Type: application/json'])
    ->response();
```

### Подготовленные данные

[](#подготовленные-данные)

- **prepareParams( *string* $postField )** - данные для запроса не будут проходить обработку [http\_build\_query()](https://www.php.net/manual/ru/function.http-build-query.php) они считаются уже подготовленными для запроса

```
/** @var andy87\curl_requester\Curl $curl */

$resp = $curl->post( 'www.vk.com/806034')
    ->prepareParams( http_build_query(['id' => 123]) )
    ->response();

// Аналог
$params = http_build_query(['id' => 123]);
$resp   = $curl->post( 'www.vk.com/806034', $params )->prepareParams()->response();
```

### Использование Basic авторизации

[](#использование-basic-авторизации)

- **setBasicAuth( *string* $token )** - Добавляет в заголовки
    `Authorization: Basic eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9`

```
/** @var andy87\curl_requester\Curl $curl */

$resp = $curl->post('www.crm.ru/get-user', ['id' => 123])
    ->setBasicAuth('eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9')
    ->response();
```

### Дополнительные cURL опции

[](#дополнительные-curl-опции)

- **addCurlOptions( *array* $array )** - дополнительные опции cURL для [curl\_setopt()](https://www.php.net/manual/ru/function.curl-setopt.php)

```
/** @var andy87\curl_requester\Curl $curl */

$resp = $curl->post('www.crm.ru/get-user/delete', ['id' => 123])
    ->addCurlOptions([ CURLOPT_FOLLOWLOCATION => true])
    ->response();
```

### Использование Cookie

[](#использование-cookie)

- **useCookie( *string* $cookie, *string* $path )** - использование cookie. Задаются:
    `CURLOPT_COOKIE`
    `CURLOPT_COOKIEJAR`
    `CURLOPT_COOKIEFILE`

```
/** @var andy87\curl_requester\Curl $curl */

$resp = $curl->post('www.crm.ru/get-user', ['id' => 123])
    ->useCookie('cookiename=cookievalue', '/tmp/cookies.txt')
    ->response();
```

### Отключение проверки SSL

[](#отключение-проверки-ssl)

- **disableSSL()** - отключение проверки SSL. Задаются:
    `CURLOPT_SSL_VERIFYPEER => false`
    `CURLOPT_SSL_VERIFYHOST => false`

```
/** @var andy87\curl_requester\Curl $curl */

$resp = $curl->post( 'www.crm.ru/get-user', ['id' => 123])
    ->disableSSL()
    ->response();
```

### Разрешение редиректа

[](#разрешение-редиректа)

- **enableRedirect()** - разрешение на редирект, если ответ сервера требует редиректа. Задаётся:
    `CURLOPT_FOLLOWLOCATION => true`

```
/** @var andy87\curl_requester\Curl $curl */

$resp = $curl->post( 'www.vk.com/806034')
    ->enableRedirect()
    ->response();
```

### Получение расширенной информации по запросу.

[](#получение-расширенной-информации-по-запросу)

- **addCurlInfo( *array* $curl\_info )** - Дополняет список информации по запросу которую надо получить

```
/** @var andy87\curl_requester\Curl $curl */

$query = $curl->post('www.vk.com/806034')
    ->addCurlInfo([CURLINFO_EFFECTIVE_URL]) // Добавление необходимой информации к ответу
    ->run()
    ->getQuery();

$last_url = $query->info[ CURLINFO_EFFECTIVE_URL ]; //Получение информации
```

### Установка event функций

[](#установка-event-функций)

- **setEvent( *string* $event, *callable* $function )** - callback функция, которая будет вызвана в event
    - *string* ***$event*** - ключ события. Доступны:
        - **Request**::***EVENT\_RUN*** - до запроса и до инициализации resource cURL
        - **Request**::***EVENT\_BEFORE\_REQUEST*** - до запроса, после инициализации resource cURL
        - **Request**::***EVENT\_AFTER\_REQUEST*** - после запроса, после инициализации resource cURL
    - *callable* ***$function*** - вызываемая функция

```
use andy87\curl_requester\entity\Query

/** @var andy87\curl_requester\Curl $curl */

$request = $curl->post('www.vk.com/806034');
//пример: задать некий callBack после запроса
$request->setEvent(
    Request::EVENT_AFTER_REQUEST,
    function ( Query $query, $curlHandler )
    {
      // some code
    }
);

$resp = $request->run()->response;
```

### Установка callBack функции

[](#установка-callback-функции)

- **setCallback( *callable* $callback )** - функция( **Request**::***EVENT\_AFTER\_REQUEST*** ), которая будет вызвана сразу после формирования ответа от сервера и до закрытия [curlHandler](https://www.php.net/manual/ru/book.curl.php)

```
use andy87\curl_requester\entity\Query

/** @var andy87\curl_requester\Curl $curl */

$request = $curl->post('www.vk.com/806034');

$request->setCallback(function ( Query $query, $curlHandler )
{
    if ( $query->httpCode !== Query::OK )
    {
        $errors = curl_error( $curlHandler );

        curl_close( $curlHandler );

        exit( $errors );
    }
});

$resp = $request->run()->response;
```

---

### Собственная реализация [cURL](https://www.php.net/manual/ru/book.curl.php) через Request

[](#собственная-реализация-curl-через-request)

```
use andy87\curl_requester\entity\Request

$ch = Request::createCurlHandler( 'www.vk.com/806034', [
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_POST            => 1,
    CURLOPT_HTTPHEADER      => [ 'some headers' ],
    CURLOPT_POSTFIELDS      => http_build_query([ 'some params' ])
]);

$resp = curl_exec( $ch );

curl_close($ch);

// Аналог(кратная запись)
$resp = Request::send( 'www.vk.com/806034', [
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_POST            => 1,
    CURLOPT_HTTPHEADER      => [ 'some headers' ],
    CURLOPT_POSTFIELDS      => http_build_query([ 'some params' ])
]);
```

---

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

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

Зависимости
-----------

[](#зависимости)

- php ( &gt;= 7.4 )
- ext-curl
- ext-json
- ext-mbstring

composer.json
-------------

[](#composerjson)

Установка с помощью [composer](https://getcomposer.org/download/)

Добавить в `composer.json`
require

```
"require": {
    ...
    "andy87/curl-requester" : "dev-main"
},

```

repositories

```
"repositories": [
    ...,
    {
      "url": "git@github.com:andy87/curl-requester.git",
      "type": "vcs"
    }
]

```

Если **composer** не установлен локально, то скачать **composer.phar** с [официального сайта](https://getcomposer.org/download/) в корневую дирекорию пргоекта.

Выполнить в консоле команду, если **composer** локально:

установленне установлкн`composer update``php composer.phar update``composer dump``php composer.phar dump`Log
---

[](#log)

- ***1.3.5***
    - Add: directory examples
    - Update:
        - `Request`
            - edit: createCurlHandler()
            - add: send()
        - ReadME

###  Health Score

14

—

LowBetter than 1% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity24

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/4658489?v=4)[Andrey Kidin](/maintainers/andy87)[@andy87](https://github.com/andy87)

---

Top Contributors

[![andy87](https://avatars.githubusercontent.com/u/4658489?v=4)](https://github.com/andy87 "andy87 (43 commits)")

### Embed Badge

![Health badge](/badges/andy87-curl-requester/health.svg)

```
[![Health](https://phpackages.com/badges/andy87-curl-requester/health.svg)](https://phpackages.com/packages/andy87-curl-requester)
```

###  Alternatives

[php-http/cache-plugin

PSR-6 Cache plugin for HTTPlug

25126.1M82](/packages/php-http-cache-plugin)[illuminate/http

The Illuminate Http package.

11937.9M6.9k](/packages/illuminate-http)[rdkafka/rdkafka

A PHP extension for Kafka

2.2k24.3k1](/packages/rdkafka-rdkafka)[httpsoft/http-message

Strict and fast implementation of PSR-7 and PSR-17

87965.9k114](/packages/httpsoft-http-message)[mezzio/mezzio-router

Router subcomponent for Mezzio

265.4M92](/packages/mezzio-mezzio-router)[serpapi/google-search-results-php

Get Google, Bing, Baidu, Ebay, Yahoo, Yandex, Home depot, Naver, Apple, Duckduckgo, Youtube search results via SerpApi.com

69127.2k](/packages/serpapi-google-search-results-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
