andy87/curl-requester

There is no license information available for the latest version (dev-main) of this package.

Decorator/Builder for curl requests

dev-main 2022-12-13 22:27 UTC

This package is auto-updated.

Last update: 2024-09-30 01:43:38 UTC


README

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

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

  • $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' ]);
  1. Ответ(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() они считаются уже подготовленными для запроса
/** @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 авторизации

  • 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 опции

  • addCurlOptions( array $array ) - дополнительные опции cURL для curl_setopt()
/** @var andy87\curl_requester\Curl $curl */

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

Использование 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

  • 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 функций

  • 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 функции

  • setCallback( callable $callback ) - функция( Request::EVENT_AFTER_REQUEST ), которая будет вызвана сразу после формирования ответа от сервера и до закрытия curlHandler
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 через 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 ( >= 7.4 )
  • ext-curl
  • ext-json
  • ext-mbstring

composer.json

Установка с помощью composer

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

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

repositories

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

Если composer не установлен локально, то скачать composer.phar с официального сайта в корневую дирекорию пргоекта.

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

Log

  • 1.3.5
    • Add: directory examples
    • Update:
      • Request
        • edit: createCurlHandler()
        • add: send()
      • ReadME