Skip to content

A very SIMPLE symfony http client bundle built on top of the httpfoundation component (instead of guzzle), using cURL and cURL multi.

License

Notifications You must be signed in to change notification settings

evaisse/SimpleHttpBundle

Repository files navigation

SimpleHttpBundle

While Still maintained, I recommand you to replace this bundle with the symfony/http-client with has better support and a handy plug-in support.

A symfony2/3/4/5 http client bundle built on the httpfoundation component (instead of guzzle), using cURL as engine.

Coverage Status

Quickstart

Get the simple API

$http = $this->container->get('http');
$http = $this->get('http');

// same as  

try {
    $http->GET('http://httpbin.org/ip'); // yeah, that's all.
} catch (\Symfony\Component\HttpKernel\Exception\HttpException $e) {
    // handle errors
}

try {
    $data = $http->POST('http://httpbin.org/post', $myArgs);
} catch (\Symfony\Component\HttpKernel\Exception\HttpException $e) {
    // handle errors
}

Easy routing with replacement syntax (similar to php frameworks like symfony2/laravel)

$data = $http->GET('http://httpbin.org/status/{code}', array(
    "code" => 200
));
// will call http://httpbin.org/status/200

$data = $http->GET('http://httpbin.org/status/{code}', array(
    "code" => 200,
    "foo" => "bar" 
));
// will call http://httpbin.org/status/200?foo=bar

Development features

The simple http bundle provide you a nice profiler toolbar addition

  • Request/Response body & headers details
  • Cookies handy panel
  • External debug links (to remote profiler using X-Debug-Link header)
  • Request timing displayed in the timeline panel

Replay feature

Add this to routing.yml file

_simple_http:
    resource: "@SimpleHttpBundle/Controller/"
    type:     annotation
    prefix:   /_profiler/simple-http

or

_simple_http:
    resource: '@SimpleHttpBundle/Resources/config/routing.yml'

You can now resend an http call directly from the profiler debug panel

Panels details

![Panels details] (https://raw.githubusercontent.com/evaisse/SimpleHttpBundle/master/Resources/doc/profiler-panels.png)

Toolbar block

![Toolbar block] (https://raw.githubusercontent.com/evaisse/SimpleHttpBundle/master/Resources/doc/profiler-toolbar.png)

Timeline panel

![Timeline panel] (https://raw.githubusercontent.com/evaisse/SimpleHttpBundle/master/Resources/doc/profiler-timeline.png)

Complete API

Complete api using transaction factory

$transac = $http->prepare('GET', 'http://httpbin.org/ip');

$transac->execute();

Parrallel execution

$a = $http->prepare('GET', 'http://httpbin.org/ip');
$b = $http->prepare('PUT', 'http://httpbin.org/put');
$c = $http->prepare('POST', 'http://httpbin.org/post');

$http->execute([
    $a, 
    $b,
    $c
]);

$a->hasError() || $a->getResult();
$b->hasError() || $b->getResult();
$c->hasError() || $c->getResult();

JSON services

print $http->prepare('POST', 'http://httpbin.org/ip', $_SERVER)
           ->json()
           ->execute()
           ->getResult()['ip'];

File upload

$http->prepare('PUT', 'http://httpbin.org/put')
     ->addFile('f1', './myfile.txt')
     ->addFile('f2', './myfile.txt')
     ->execute();


$http->prepare('POST', 'http://httpbin.org/post', [
        'infos' => 'foo',
        'bar'   => 'so so',
    ])
     ->addFile('f1', './myfile.txt')
     ->addFile('f2', './myfile.txt')
     ->execute();

Cookies persistance

$a = $http->prepare('GET',  'http://httpbin.org/ip');
$b = $http->prepare('PUT',  'http://httpbin.org/put');
$c = $http->prepare('POST', 'http://httpbin.org/post');


$cookies = $http->getDefaultCookieJar();
 // $cookies = $http->getCookieJar($session); if you want to directly store in user session

$http->execute([
    $a, 
    $b,
    $c
], $cookies);

dump($cookies);

Promise usage

$stmt = $http->prepare('PUT', 'http://httpbin.org/put')

$stmt->onSuccess(function ($data) {
    // handle data
})->onError(function (\Symfony\Component\HttpKernel\Exception\HttpException $e) {
    // handle errors
})->onFinish(function () {
    // like "finally"
});

$http->execute([
    $stmt
]);

About

A very SIMPLE symfony http client bundle built on top of the httpfoundation component (instead of guzzle), using cURL and cURL multi.

Resources

License

Stars

Watchers

Forks

Packages